问题 1 一个司机与售票员的例子在公共汽车上,为保证乘客的平安,司机和售票员应协调工作:停车后才能开门,关车门后才能行车
用 PV 操作来实现他们之间的协调
S1:是否允许司机启动汽车的变量S2:是否允许售票员开门的变量driver()/机进程{while (1 不/停地循环{P(S1);请求启动汽车启动汽车;正常行车;到站停车;V(S2);释放开门变量,相当于通知售票员可以开门}}busmanO/售票员进程{while(1){关车门;V(S1); /释放开车变量,相当于通知司机可以开车售票P(S2); /请求开门开车门;上下乘客;}}注意:busman() driver 两个不停循环的函数问题 2 图书馆有 1 个座位,每位进入图书馆的读者要在登记表上登记,退出时要在登记表上注销
有多少个进程
〔答:一个程序;为每个读者设一个进程〕〔1〕当图书馆中没有座位时,后到的读者在图书馆为等待〔堵塞〕〔2〕当图书馆中没有座位时,后到的读者不等待,立即回家
解〔1 )设信号量:S=1; MUTE*=1P(S)P(MUTE*)登记V(MUTE*)阅读P(MUTE*)注销V(MUTE*)V(S)解⑵设整型变量 COUNT=1;信号量:MUTE*=1;P(MUTE*);IF (COUNT==0){ V(MUTE*);RETURN;}COUNT=COUNT-1;登记V(MUTE*);阅读P(MUTE*);COUNT=COUNT+1;V(MUTE*);RETURN;问题 3 有一座东西方向的独木桥;用 P,V 操作实现:〔1〕每次只允许一个人过桥;〔2〕当独木桥上有行人时,同方向的行人可以同时过桥,相反方向的人必须等待
〔3〕当独木桥上有自东向西的行人时,同方向的行人可以同时过桥,从西向东的方向,只允许一个人单独过桥
〔此问题和读者与写者问题一样,东向西的为读者,西向东的为写者〕