(一) 图书馆有100个座位,每位进入图书馆的读者要在登记表上登记,退出时要在登记表上注销。要几个程序?有多少个进程?(答:一个程序;为每个读者设一个进程)
(1) 当图书馆中没有座位时,后到的读者在图书馆为等待(阻塞) (2) 当图书馆中没有座位时,后到的读者不等待,立即回家。 设信号量 S=200;MUTEX=1; P(S)
P(MUTEX) 登记
V(MUTEX) 阅读
P(MUTEX) 注销
V(MUTEX) V(S) (2)
设信号量 MUTEX=1; 整型变量 S=200; P(MUTEX) IF(S==0) { V(MUTEX) RETURN }
ELSE{
COUNT=COUNT-1; 登记
V(MUTEX) 阅读
P(MUTEX)
COUNT=COUNT+1; 注销
V(MUTEX) RETURN }
解(1 )
设信号量:S=100; MUTEX=1 P(S)
P(MUTEX) 登记
V(MUTEX) 阅读
P(MUTEX) 注销
V(MUTEX) V(S) 解(2)
设整型变量 COUNT=100; 信号量:MUTEX=1; P(MUTEX); IF (COUNT==0) { V(MUTEX); RETURN; }
COUNT=COUNT-1; 登记
V(MUTEX); 阅读
P(MUTEX);
COUNT=COUNT+1; V(MUTEX); RETURN;
(二) 有一座东西方向的独木桥;用P,V操作实现: (1) 每次只允许一个人过桥;
(2) 当独木桥上有行人时,同方向的行人可以同时过桥,相反方向的人必须等待。 (3) 当独木桥上有自东向西的行人时,同方向的行人可以同时过桥,从西向东的方向,只允许一个人单独过桥。(此问题和读者与写者问题相同,东向西的为读者,西向东的为写者)。 (1)
设信号量S=1 P(S) 过桥 V(S) (2)
设 信号量 S=1 EW=1;(东向西互斥计数量) WE=1;(西向东互斥计数量) 整型变量 CE =0;(东向西桥上人数) CW=0;(西向东桥上人数)
东向西: P(EW) IF(CE==0) { P(S) }
CE++; V(EW) 过桥 P(EW) CD--;
IF(CD==0){ V(S) }
V(EW)
(1)解
设信号量 MUTEX=1 P (MUTEX) 过桥
V (MUTEX) (2)解
设信号量: MUTEX=1 (东西方互斥) MD=1 (东向西使用计数变量互斥) MX=1 (西向东使用计数变量互斥)
设整型变量: CD=0 (东向西的已上桥人数) CX=0 (西向东的已上桥人数)
从东向西: P (MD) IF (CD=0)
{P (MUTEX) } CD=CD+1 V (MD) 过桥 P (MD) CD=CD-1 IF (CD=0)
{V (MUTEX) } V (MD)
从西向东: P (MX) IF (CX=0)
{P (MUTEX) } CX=CX+1 V (MX) 过桥 P (MX) CX=CX-1 IF (CX=0)
{V (MUTEX) } V (MX)
(3) 解:从东向西的,和(2)相同;从西向东的和(1)相同。
(三) 有一个俱乐部,有甲乙两个服务员,当顾客有请求时,甲负责送烟,乙负责送火,无顾客请求时,服务员睡眠。顾客自己不能带烟和火,当顾客要抽烟时,可请求服务员送烟和火,烟和火还未送到时,顾客必须等待。
设置信号量 SY=0;SH=0;DY=0;DH=0;
甲服务员:A; 乙服务员:B; 顾客:S; A: P(DY) 送烟 V(SY) GOTO A B: P(DH) 送火 V(SH) GOTO B S: V(DY) V(DH) P(SY)