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

答:

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|个进程等待访问公共变量

原文地址:https://www.cnblogs.com/luo841997665/p/4664586.html