(8分)某寺庙有小和尚、老和尚若干,有一水缸,由小和尚提水入缸供老和尚饮用。水缸可容10 桶水,水取自同一井中。水井径窄,每次只能容一个桶取水。水桶总数为3 个。每次入缸取水仅为1 桶水,且不可同时进行。试用信号量和P/V 操作给出有关从缸取水、入水的算法描述。
【参考答案】
Semap...
用户登录可进行刷题及查看答案
Semaphore mutex_well = 1; //实现对水井这一互斥资源的互斥访问 Semaphore mutex_vat = 1; //实现对水缸这一互斥资源的互斥访问 Semaphore vat_empty = 10; //水缸剩余能容纳的水的桶数 Semaphore vat_full = 0; //水缸已容纳的水的桶数 Semaphore pail = 3; //空闲的水桶的数量 CoBegin{ process 小和尚 { while(TRUE){ P(vat_empty); //(同步)申请向水缸倒水,若水缸已满则等待 P(pail); //申请使用空闲水桶,如没有空闲水桶则等待 P(mutex_well); //(互斥)防止他人使用水井 从井中取水; V(mutex_well); //(互斥)允许他人使用水井 P(mutex_vat); //(互斥)防止他人使用水缸 将水倒入水缸; V(mutex_vat); //(互斥)允许他人使用水缸 V(vat_full); //(同步)水缸已用容量加1,若有老和尚喝水则通知 V(pail); //释放一个空闲水桶,若有和尚在等待使用,则通知 } } process 老和尚 { while(TRUE){ P(vat_full); //(同步)申请从水缸取水,若水缸为空,则等待 P(pail); //申请使用空闲水桶,如没有空闲水桶则等待 P(mutex_vat); //(互斥)防止他人使用水缸 从水缸取水; V(mutex_vat); //(互斥)允许他人使用水缸 V(vat_empty); //(同步)水缸剩余容量加1,若有小和尚等打水则通知 喝水; V(pail); //释放一个空闲水桶,若有和尚在等待使用,则通知 } } }CoEnd
登录后提交答案
暂无评论,来抢沙发