2. 3. 有个寺庙,庙中有个小和尚和老和尚若干人,有一只水缸,由小和尚提水入缸给老和尚饮用。水缸可容10 桶水,水取自同一口水井中。水井径窄,每次仅能容一只水桶取水,水桶总数为3 个。若每次只能入缸一桶水和取缸中一桶水,而且还不可以同时进行。试用一种同步工具写出小和尚和老和尚入水、取水的活动过程。 4. 答:本题为两个进程共享两个缓冲区的问题。首先考虑本题有几个进程:从井中取 水后向缸中倒水此为连续动作,为一个进程;从缸中取水为另一个进程。 其次考虑信号量,有关互斥的 有:水井和水缸。水井一次仅能一个水桶进出,水缸一次入、取水为一桶。分别设互斥信号量为:mutex1 和mutex2 控制互斥。有关同步问题为:三个水桶无论从井中取水还是入出水缸都是一次一个,应为它设信号量 count,抢不到水桶的进程只好等待。水缸满时不可入水,设信号量为empty,控制水量,水缸空时不可出水,设信号量 full,控制出水量。 设置信号量初值:mutex1:=mutex2:=1;count:=3;empty:=10;full:=0; Parbegin ﹛ 小和尚打水进程: Begin P(empty); P(count); P(mutex1); 从井中打水; V(mutex1); P(mutex2); 倒水入缸; V(mutex2); V(count); V(full); End 老和尚取水进程: Begin P(full); P(count); P(mutex2); 从缸中取水; V(mutex2); V(count); V(empty); End } Parend. 2. 假定一个阅览室可供50 个人同时阅读。读者进入和离开阅览室时都必须在阅览室入口处的一个登记表上登记,阅览室有50 个座位,规定每次只允许一个人登记或注销登记。要求:(1)用PV 操作描述读者进程的实现算法(可用流程图表示,登记、注销可用自然语言描述); (2)指出算法中所用信号量的名称、作用及初值。 解 S1:阅览室可供使用的空座位,其初值为50 S: 是否可通过阅览室,其初值为1 Process READ_in(i=1…50) {到达阅览室入口处; P(S1);P(S); 在入口处登记座位号; V(s); 进入座位并阅读; } Process READ_out(j=1…50) {结束阅读到达阅览室入口处; P(S); 在入口处注销座位号; V(S1);V(S) 离开入口处; } ●N 个并发进程公用一个公共变量Q,信号灯进程: main() { begin s=1; cobegin p1();p2();… pn(); coend } Pi() { P(s) … V(s) } 其中i=1、2…n ●用户 A、B、C 打印进程(间接相互制约关系):s 初值为 ...