ArtOfMP--生产者-消费者问题
2018-11-06 本文已影响0人
橡树人
生产者-消费者问题
问题描述
最终,Alice和Bob相爱了,然后结婚了。
最终,他们离婚了。
法院判决Alice拥有宠物,Bob喂养宠物。
现在,两只宠物相处和谐,但是它们支持Alice,每次见到Bob就攻击他。
在保证Bob和宠物们不同时在院子里的前提下,如何投放食物?
要求:
(1)除非院子里有食物,否则Alice不会把宠物放到院子里;
(2)除非宠物吃光了院子里的食物,离开院子回到Alice家里了,否则Bob不会进入院子投放食物;
方案一:can-string协议
首先,Bob在Alice的窗户边上放一个直立的易拉罐,在易拉罐的周围系上绳子,一端连着易拉罐,另一端放在自己的卧室里。
然后,Bob进入院子,投放完食物,拉倒易拉罐。
当Alice想释放宠物到院子里时,她会:
- 她等待着直到易拉罐处于倒下的状态;
- 她释放宠物到院子里;
- 当宠物回来时,Alice检查下食物有没有吃完。如果吃完了,她就重置易拉罐的状态为直立;
当Bob要进入院子时,他会:
- 他等待着直到易拉罐处于直立状态;
- 他到院子里投放食物;
- 他拉绳子将易拉罐置于倒下的状态;
性质1:满足互斥性
性质2:无饿死
性质3:生产者-消费者
性质4:会出现等待,比如当Bob投放完食物就去度假了,忘记将易拉罐置为倒下的状态,则此时易拉罐就会一直处于直立状态,则Alice就一直等待;
分析:
易拉罐的状态反映了院子的状态:如果易拉罐处于倒下的状态,则说明院子里有食物,宠物们在院子里吃食物;如果易拉罐处于直立的状态,则说明院子里的食物被吃完了,宠物也不在院子里,回到Alice家里了;
应用
在并行和分布式系统中很常见,比如生产者-处理器将数据放入通信buffer中,消费者-从通信buffer中读取数据等。