试用P-V操作定出他们能同步、互斥的相关语句
有一只盘子,每次放入一个水果,父亲总是放苹果到盘中,母亲向盘中放桔子,一个儿子专等吃盘中的桔子,一个女儿专等吃盘中的苹果。试用P-V操作定出他们能同步、互斥的相关语句...
有一只盘子,每次放入一个水果,父亲总是放苹果到盘中,母亲向盘中放桔子,一个儿子专等吃盘中的桔子,一个女儿专等吃盘中的苹果。试用P-V操作定出他们能同步、互斥的相关语句
展开
1个回答
展开全部
这个问题可看作是2个生产者和2个消费者共享一个容量为1的缓冲区的进程同步问题。
需要定义三个信号量:
mutex //用于测试盘中能否放水果
SO //用于测试盘中是否有桔子
SA //用于测试盘中是否有苹果
参考代码如下:
begin
mutex, SO, SA : semaphore;
mutex := 1; /*盘中只能放一个水果*/
SA := 0; /*初始时没有苹果*/
SO := 0; /*初始时没有桔子*/
cobegin
process father /*父亲进程*/
begin L1: have an apple; /*准备了一个苹果*/
P(mutex); /*测试盘中是否能放水果*/
put an apple; /*往盘中放一个苹果*/
V(SA); /*发送盘中有苹果的信号*/
goto L1;
end;
process mather /*母亲进程*/
begin L2: have an orange; /*准备了一个桔子*/
P(mutex); /*测试盘中是否能放水果*/
put an orange; /*往盘中放一个桔子*/
V(SO); /*发送盘中有桔子的信号*/
goto L2;
end;
process son /*儿子进程*/
begin L3: P(SO); /*测试盘中是否有桔子*/
get an orange; /*取走桔子*/
V(mutex); /*发送盘中可以放水果的信号*/
eat an orange; /*吃桔子*/
goto L3;
end;
process daughter /*女儿进程*/
begin L4: P(SA); /*测试盘中是否有苹果*/
get an apple; /*取走苹果*/
V(mutex); /*发送盘中可以放水果的信号*/
eat an apple; /*吃苹果*/
goto L4;
end;
coend;
end;
需要定义三个信号量:
mutex //用于测试盘中能否放水果
SO //用于测试盘中是否有桔子
SA //用于测试盘中是否有苹果
参考代码如下:
begin
mutex, SO, SA : semaphore;
mutex := 1; /*盘中只能放一个水果*/
SA := 0; /*初始时没有苹果*/
SO := 0; /*初始时没有桔子*/
cobegin
process father /*父亲进程*/
begin L1: have an apple; /*准备了一个苹果*/
P(mutex); /*测试盘中是否能放水果*/
put an apple; /*往盘中放一个苹果*/
V(SA); /*发送盘中有苹果的信号*/
goto L1;
end;
process mather /*母亲进程*/
begin L2: have an orange; /*准备了一个桔子*/
P(mutex); /*测试盘中是否能放水果*/
put an orange; /*往盘中放一个桔子*/
V(SO); /*发送盘中有桔子的信号*/
goto L2;
end;
process son /*儿子进程*/
begin L3: P(SO); /*测试盘中是否有桔子*/
get an orange; /*取走桔子*/
V(mutex); /*发送盘中可以放水果的信号*/
eat an orange; /*吃桔子*/
goto L3;
end;
process daughter /*女儿进程*/
begin L4: P(SA); /*测试盘中是否有苹果*/
get an apple; /*取走苹果*/
V(mutex); /*发送盘中可以放水果的信号*/
eat an apple; /*吃苹果*/
goto L4;
end;
coend;
end;
ZESTRON
2024-09-04 广告
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸...
点击进入详情页
本回答由ZESTRON提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询