某寺庙,有小和尚、老和尚若干。一水桶,有一水缸,由小和尚提水入缸供老和尚饮用。水缸可容10桶水,水取自同一井中。水井径窄,每次只能容一个水桶取水。水桶总数为3。每次入、取缸水仅为一桶,且不可同时进行。试给出有关取水、入水的算法描述。【北京邮电1998】
无论什么问题一定要按照常规去做,所以以一般思维逻辑思考就可以
小和尚肯定是要看缸里面有没有满,如果没有满,就去找水桶,然后就去打水,把水倒到水桶里面,,,,,一般的思维逻辑思考问题就行
1.总体来看要写两个进程,小和尚打水,老和尚要喝水
2.水缸的初值要设为 empty=10 水桶的初值要设为tong=3
3.取水缸/倒水往水缸里面 不能同时进行 所以要设置互斥变量 s1=1
4.水井径窄,每次只能容一个水桶取水 所以要设置互斥变量 s2=1
5.老和尚如何能喝水呢所以要设置full=0来判断水桶里面的水
p小和尚(){
wait(empty);//看水缸里面的水
wait(tong);//打水的桶
wait(s2)
打水
signal(s2);
wait(s1);
往水缸里面倒水
signal(s1);
signal(tong);
signal(full);
}
p老和尚(){
wait(full);
wait(tong);
wait(s1);
取水;
signal(s1);
signal(tong);
signal(empty);
}