某寺庙,有小和尚、老和尚若干。有一水缸,由小和尚用水桶从井中提水入缸,老和尚用水桶从缸里取水饮用。水缸可容10桶水,水取自同一井中。水井径窄,每次只能容一个水桶取水。水桶总数为3个。每次入、取缸水仅为1桶,且不可以同时进行。试用P、V操作给出小和尚、老和尚动作的算法描述。
寺庙和尚打水 设信号量mutex_gang, mutex_jing, gang_empty, gang_full, count分别表示使用缸互斥, 使用井互斥, 缸空, 缸满, 水桶总个数 semaphore mutex_jing = 1, mutex_gang = 1, gang_empty = 10, gang_full = 0, count = 3; void 小和尚打水() { while(1) { p(gang_empty); p(count); p(mutex_jing); 从井中打水; v(mutex_jing); p(mutex_gang); 将水倒入缸中; v(mutex_gang); v(count); v(gang_full); } } void 老和尚取水() { while(1) { p(gang_full); p(count); p(mutex_gang); 从缸中取水; v(mutex_gang); v(count); v(gang_empty); } } void main() { parbegin(小和尚打水(), 小和尚打水(), 老和尚取水(), 老和尚取水()...) }