桌上有一空盘,最多允许存放一只水果。爸爸只向盘中放一个苹果,妈妈只向盘中放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果。用wait、signal操作实现爸爸、妈妈、儿子、女儿四个并发进程的同步。
2018-03-31 10:46
2001 查看
分析设计四个信号量metux,empty、apple、orange;
metux表示:爸爸、妈妈、儿子和女儿进程对盘子的互斥使用;
empty表示:盘子是否为空;
apple表示:是否可以取苹果;
orange表示:是否可以取桔子。
算法描述如下:semaphore empty=1,nutex=1,apple=0,orange=0; //为四个信号量赋初值
void father(){
do{
wait(empty); //等待盘子为空
wait(metux); //等待获取对盘子的操作
爸爸向盘中放一个苹果;
signal(mutex); //释放对盘子的操作
signal(apple); //通知女儿可以来盘子中取苹果
}while(TRUE);
}
void mather(){ //与父亲进程雷同
do{
wait(empty);
wait(metux);
妈妈向盘中放一个桔子;
signal(mutex);
signal(orange);
}while(TRUE);
}
void son(){
do{
wait(orange); //判断盘子中是否有桔子
wait(metux); //等待获取对盘子的操作
儿子取出盘中的桔子;
signal(mutex); //释放对盘子的操作
signal(empty); //盘子空了,可以继续放水果了
}while(TRUE);
}
void daugther(){ //与儿子进程雷同
do{
wait(apple);
wait(metux);
女儿取出盘中的苹果;
signal(mutex);
signal(empty);
}while(TRUE);
}
void main() { //四个并发进程的同步执行
cobegin
father();mather();son();daug
4000
ther();
coend
}
metux表示:爸爸、妈妈、儿子和女儿进程对盘子的互斥使用;
empty表示:盘子是否为空;
apple表示:是否可以取苹果;
orange表示:是否可以取桔子。
算法描述如下:semaphore empty=1,nutex=1,apple=0,orange=0; //为四个信号量赋初值
void father(){
do{
wait(empty); //等待盘子为空
wait(metux); //等待获取对盘子的操作
爸爸向盘中放一个苹果;
signal(mutex); //释放对盘子的操作
signal(apple); //通知女儿可以来盘子中取苹果
}while(TRUE);
}
void mather(){ //与父亲进程雷同
do{
wait(empty);
wait(metux);
妈妈向盘中放一个桔子;
signal(mutex);
signal(orange);
}while(TRUE);
}
void son(){
do{
wait(orange); //判断盘子中是否有桔子
wait(metux); //等待获取对盘子的操作
儿子取出盘中的桔子;
signal(mutex); //释放对盘子的操作
signal(empty); //盘子空了,可以继续放水果了
}while(TRUE);
}
void daugther(){ //与儿子进程雷同
do{
wait(apple);
wait(metux);
女儿取出盘中的苹果;
signal(mutex);
signal(empty);
}while(TRUE);
}
void main() { //四个并发进程的同步执行
cobegin
father();mather();son();daug
4000
ther();
coend
}
相关文章推荐
- 在PV操作中会有一个经典的例子就是爸爸妈妈儿子女儿吃水果问题,爸爸妈妈向盘子里放入水果,儿子女儿向盘子取水果。然而爸爸只向盘子放苹果,妈妈只向盘子放橘子,女儿只能吃苹果,儿子只能吃橘子。并且盘子里只能
- 多个客户端操作甘特图时,如何做才能实现不允许对一个控件并发操作
- C#使用互斥量(Mutex)实现多进程并发操作时多进程间线程同步操作(进程同步)的简单示例代码及使用方法
- 用PV操作解决经典进程同步问题 C#实现
- 用多进程同步方法演示“桔子-苹果”问题
- 用多进程同步方法演示“桔子-苹果”问题
- 妈妈告诉将要出嫁的女儿,爸爸告诉将要结婚的儿子!
- Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步
- Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步
- Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步
- java并发包中的Condition和Lock 取代Synchronized、wait、notify/notifyAll实现线程的同步与互斥
- 多个生产者-一个消费者-进程间同步的例子 - OutputDebugString的实现
- Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步
- 同步并发操作之等待一个事件或条件
- C#进程间的同步,实现只能运行一个程序的效果
- 用多进程同步方法演示“桔子-苹果”问题
- n个并发进程共用一个公共变量Q,写出用信号灯实现n个进程互斥的程序描述,给出信号灯值得取值范围,并说明每个取值范围的物理意义。
- 将一个5*5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素(顺序从左到右,从上到下顺序依次从小到大存放),写一个函数实现之。用main函数调用。
- mutex 实现 只允许一个进程
- java同步和互斥的应用:生产者消费者之爸爸妈妈儿子女儿苹果橘子编程实现