n个并发进程共用一个公共变量Q,写出用信号灯实现n个进程互斥的程序描述,给出信号灯值得取值范围,并说明每个取值范围的物理意义。

时间:2023-03-08 18:19:56

答:

var mutex: semaphore:=1;

begin

cobegin

process i : begin   // i = 1,2,……,n

repeat

P(mutex);

对公共变量Q的访问;

V(mutex);

reminder section

until false;

end

coend

信号量mutex的取值范围为mutex.value∈[1,-(n-1)]

1、  值为1时表示没有进程访问公共变量

2、  值为2时表示有一个进程正在访问公共变量

3、  值为3时表示有一个进程正在访问公共变量,同时又|mutex.value|个进程等待访问公共变量