试用P-V操作定出他们能同步、互斥的相关语句
发布网友
发布时间:2022-04-14 17:08
我来回答
共1个回答
热心网友
时间:2022-04-14 18:37
这个问题可看作是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;