十三 真经之少林寺问题
问题描述 某寺庙有小和尚老和尚若干庙内有一水缸由小和尚提水入缸供老和尚饮用水缸可容纳桶水每次入水取水仅为桶不可同时进行水取自同一井中水井径窄每次只能容纳一个水桶取水设水桶个数为个试用信号灯和PV操作给出老和尚和小和尚的活动
问题分析 从井中取水并放入水缸是一个连续的动作可以视为一个进程从缸中取水为另一个进程 设水井和水缸为临界资源引入mutexmutex三个水桶无论从井中取水还是放入水缸中都一次一个应该给他们一个信号量count抢不到水桶的进程只好为等待水缸满了时不可以再放水了设empty控制入水量水缸空了时不可取水设full
The PV code Using Pascal
var mutexmutexemptyfullcount:semaphore; mutex:=mutex:=; empty:=; full:=; count:=; cobegin Procedure Fetch_Water Procedure Drink_Water begin begin while true while true p(empty); p(full); P(count); p(count); P(mutex); p(mutex); Get Water;Get water and v(mutex); Drink water; P(mutex); p(mutex); pure water into the jar; v(empty); v(mutex); v(count); v(count); end v(full); end coend 返回《操作系统之PV金典》 |