资源描述:
《经典进程同步问题小结》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1生产者-消费者问题2哲学家就餐问题3读者-写者问题4睡眠理发师问题1经典问题:生产者-消费者问题问题描述一个有限空间的共享缓冲区,负责存放货物生产者向缓冲区中放物品,缓冲区满则不能放消费者从缓冲区中拿物品,缓冲区空则不能拿进程通信生产者-消费者问题分析互斥关系分析任何时刻,只能有一个进程在缓冲区中操作引入互斥信号量(二元信号量)信号量为0,表明已有进程进入临界区;同步关系分析对于“生产者”而言,缓冲区满则应等待引入同步信号量“empty”,为0表示缓冲区满对于“消费者”而言,缓冲区空则应等待引入同步信号量“fu
2、ll”,为0表示缓冲区空进程通信1.利用记录型信号量解决生产者—消费者问题假定在生产者和消费者之间的公用缓冲池中,具有n个缓冲区,这时可利用互斥信号量mutex实现诸进程对缓冲池的互斥使用;利用信号量empty和full分别表示缓冲池中空缓冲区和满缓冲区的数量。又假定这些生产者和消费者相互等效,只要缓冲池未满,生产者便可将消息送入缓冲池;只要缓冲池未空,消费者便可从缓冲池中取走一个消息。对生产者—消费者问题可描述如下:Varmutex,empty,full:semaphore∶=1,n,0;buffer:a
3、rray[0,…,n-1]ofitem;in,out:integer∶=0,0;beginparbeginproceducer:beginrepeat…produceranitemnextp;…wait(empty);wait(mutex);buffer(in)∶=nextp;in∶=(in+1)modn;signal(mutex);signal(full);untilfalse;endconsumer:beginrepeatwait(full);wait(
4、mutex);nextc∶=buffer(out);out∶=(out+1)modn;signal(mutex);signal(empty);consumertheiteminnextc;untilfalse;endparendend2.利用AND信号量解决生产者—消费者问题varmutex,empty,full:semaphore∶=1,n,0;buffer:array[0,…,n-1]ofitem;inout:integer∶=0,0;beginparbeginpr
5、oducer:beginrepeat…produceaniteminnextp;…Swait(empty,mutex);buffer(in)∶=nextp;in∶=(in+1)modn;Ssignal(mutex,full);untilfalse;endconsumer:beginrepeatSwait(full,mutex);nextc∶=buffer(out);out∶=(out+1)modn;Ssignal(mutex,empty);consumerth
6、eiteminnextc;untilfalse;endparendend2经典问题:哲学家就餐问题问题描述五个哲学家坐在圆桌前,每人一份炒饭每个哲学家两侧各有一支筷子哲学家处于吃饭和思考两种状态进程通信哲学家就餐问题的信号量解法互斥关系分析筷子:同一时刻只能有一个哲学家拿起筷子同步关系分析就餐:只有获得两个筷子后才能进餐特殊情况考虑死锁:如果每个哲学家都拿起一只筷子,都饿死并行程度:五只筷子允许两人同时进餐进程通信利用AND信号量机制解决哲学家进餐问题在哲学家进餐问题中,要求每个哲学家先获得两个临界资源
7、(筷子)后方能进餐,这在本质上就是前面所介绍的AND同步问题,故用AND信号量机制可获得最简洁的解法。Varchopstickarray[0,…,4]ofsemaphore∶=(1,1,1,1,1);processirepeatthink;Swait(chopstick[(i+1)mod5],chopstick[i]);eat;Ssignal(chopstick[(i+1)mod5],chopstick[i]);untilfalse;3经典问题:读者-写者问题问题描述写者向数据区放数据,读者从
8、数据区获取数据多个读者可同时读取数据多个写者不能同时写数据读者和写者的控制策略变化多端进程通信利用记录型信号量解决读者-写者问题利用信号量集机制解决读者-写者问题4经典问题:睡眠理发师问题问题描述一把理发椅,N把等待座位理发师为理发椅上的顾客理发,没有顾客就在理发椅上睡觉有一个顾客时需要叫醒理发师多个顾客时需要在等待座位上等候进程通信睡眠理发师问题的信号量解法互斥关系分