并发编程中的经典问题与解决方案
1. 生产者 - 消费者问题
生产者 - 消费者问题源于一个有趣的故事。Alice 和 Bob 离婚后,法官让 Bob 给 Alice 的宠物喂食,但宠物会攻击 Bob,所以他们需要一个协议来确保 Bob 送食物和宠物在院子里不会同时发生,且不浪费时间。这就是生产者 - 消费者问题,即生产者(Bob)生产资源(食物),消费者(宠物)消费资源,要保证资源的合理生产和消费。
解决这个问题的是“罐头 - 绳子”协议:
- Bob 的操作 :
1. 将一个罐头立在 Alice 的窗台上,把绳子一端系在罐头上,另一端放在自己客厅。
2. 把食物放进院子后,拉绳子把罐头弄倒。
3. 等待罐头再次立起,重复上述步骤。
- Alice 的操作 :
1. 等待罐头倒下。
2. 放出宠物。
3. 宠物回来后,检查食物是否吃完,若吃完则把罐头立起。
这个协议具有以下三个重要属性:
|属性|描述|
|----|----|
|互斥性|Bob 和宠物不会同时在院子里|
|无饥饿性|如果 Bob 一直愿意喂食,宠物一直饥饿,宠物会无限次进食|
|生产者 - 消费者特性|宠物只有在有食物时才会进入院子,Bob 不会在有未消费食物时提供更多食物|
然而,这个协议也存在等待问题。如果 Bob 放完食物去度假而忘记重置罐头,宠物可能会饿死。在计算机科学中,生产者 - 消费者问题几乎出现在所有并行和分布式系统中,例如处理器将数据放入通信缓冲区以便在网络互连或共享总线
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



