coend
请添加必要的信号量和P、V(或wait( )、signal( ))操作实现上述过程的互斥和同步。要求写出完整的过程,说明信号量的含义并赋初值。 解:
begin
semaphore mutex=1; semaphore seat=10; semaphore S1=0; semaphore S2=0; cobegin {
process 顾客i {
P(seat); P(mutex);
//若没有空座位,顾客等待 //取号互斥
//用于顾客取号的互斥信号量
//顾客等待座位的资源信号量,当没有空座位时顾客在其上阻塞 //营业员与顾客的同步信号量,当没有顾客时营业员在其上阻塞 //顾客与营业员的同步信号量,等待叫号时顾客在其上阻塞
从取号机获得一个号码; V(mutex); V(S1); P(S2); 等待叫号; 获得服务; }
process 营业员 {
while (TRUE) {
P(S1); V(S2); 叫号;
V(seat); //空出一个座位(此行放在顾客进程的等待叫号后面也可)
//若无顾客则等待 //唤醒等待叫号的顾客 //通知营业员,已有顾客
为顾客服务; } } } coend end