操作系统-父亲放苹果

题目:桌上有一空盘,允许存放一只水果,爸爸可以向盘中放苹果,也可以向盘中放桔子,儿子专等着吃盘中的桔子,女儿专等着吃盘中的苹果,规定当盘空时一次只能放一只水果供吃者用,请用P、V原语实现爸爸、儿子和女儿三个并发进程的同步。

解:在本题中,应设置三个信号量S、So、Sa。

信号量S表示盘子是否为空,其初值为1;

信号量So表示盘中是否有桔子,其初值为0;

信号量Sa表示盘中是否有苹果,其初值为0。

同步描述如下:

semaphore S=1,Sa=0,So=0; 
father: 
while(true) 
{
P(S); 
将水果放入盘中; 
if(放入的是桔子)V(So); 
else V(Sa); 
};
son:
while(true) 
{ 
P(So); 
从盘中取出桔子; 
V(S); 
吃桔子; 
};
daughter:
while(true) 
{ 
P(Sa); 
从盘中取出苹果; 
V(S); 
吃苹果; 
};

猜你喜欢

转载自blog.csdn.net/qq_40956679/article/details/80603776
今日推荐