题目
编程实现如下互斥同步问题:桌上有一空盘,爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。请用P、V原语(wait和signal操作)实现爸爸、儿子、女儿三个并发进程的同步,说明各信号量的含义并赋初值。(注:本题默认盘子中可放多个水果,假设爸爸放水果和孩子们吃水果都是循环往复的过程)
begin
parbegin
father; son; daughter;//分别为爸爸、儿子、女儿三个并发进程
parend
end
答案
代码
/*
互斥信号量mutex表示盘子是否可用,其初值为1;
同步信号量orange表示盘中桔子数目,其初值为0;
同步信号量apple表示盘中苹果数目,其初值为0。
*/
Var mutex,apple,orange : semaphore:=1,0,0;
father:
begin
repeat
wait(mutex);
将水果放入盘中;
if(放入的是桔子) then signal(orange);
else signal(apple);
signal(mutex);
until false
end
son:
begin
repeat
wait(orange);
wait(mutex);//两个wait不能交换顺序
从盘中取出桔子;
signal(mutex);
吃桔子;
until false
end
daughter:
begin
repeat
wait(apple);
wait(mutex);//两个wait不能交换顺序
从盘中取出苹果;
signal(mutex);
吃苹果;
until false
end