和尚打水问题
寺庙中有小和尚和老和尚若干,有一个水缸,由小和尚提水入缸供老和尚饮用.水缸可以容纳10桶水,水取自同一口井中,由于水井口窄,每次只能容纳一个水桶取水,水桶总数为3个。每次入水、取水仅为一桶,且不可同时进行。试给出有关取水、入水的PV算法描述。
问题分析:
小和尚之间是互斥关系,老和尚之间是互斥关系,老和尚和小和尚是互斥+合作;这样的话就可以看成是一个生产者消费者问题,只是互斥信号量比生产者消费者问题多了;井,缸,水桶都是要被“保护”的,所以对它们分别设mutex1,mutex2,mutex3,初值分别设为1,1,3;针对可以装10桶水的缸,可以看成生产者消费者问题里面的产品缓冲区,设一个empty告诉小和尚空了几桶水的位置,设一个full告诉老和尚有几桶水可以打。
解析过程:
信号量定义:
mutex1:表示是否可以在井中打水;
mutex2:表示是否可以在将桶伸入缸中;
mutex3:表示是否有桶可用;
empty:表示缸中有多少是空的;
full:表示缸中有多少是满的。
mutex1=mutex2=1;mutex3=3;empty=0;full=10。