问答题 某寺庙,有小和尚和老和尚若干,有一个水缸,由小和尚提水入缸供老和尚饮用。水缸可以容纳10桶水,水取自同一口井中,由于水井口窄,每次只能容纳一个水桶取水。水桶总数为3个(老和尚和小和尚共同使用)。每次入水、取水仅为一桶,且不可同时进行。试给出有关取水、入水的算法描述。
【正确答案】本题需要设置5个信号量: semaphore empty=10; //表示缸中目前还能装多少桶水,初始时能装10桶水 semaphore full=0; //表示缸中有多少桶水,初始时缸中没有水 semaphore buckets=3; //表示有多少个空桶可用,初始时有3个桶可用 semaphore mutex_well=1; //用于实现对井的互斥操作 semaphore mutex_bigjar=1; //用于实现对缸的互斥操作 young_monk(){ //小和尚入水算法 While(true){ P(empty); P(bucketS); 去井边; P(mutex_well); 取水; V(mutex_well); 回寺庙; P(mutex_bigjar); pure the water into the big jar; V(mutex_bigjar); V(buckets); V(full); } } old_monk(){ //老和尚取水算法 While(true){ P(full); P(buckets); P(mutex_bigjar); 取水; V(mutex_bigjar); 喝水; V(buckets); V(empty); } }
【答案解析】