线程同步之买牛奶问题

线程同步之买牛奶问题

有一台冰箱,两个人,我们需要对这两个人买牛奶的行为作出一些约束,使得满足以下条件

  1. 不会有超过一个人买了牛奶
  2. 如果冰箱里没有牛奶,一定会有某个人去买

方案一

一个很直白的方法是一个人只要去买牛奶了,就在冰箱上贴一个便条,买完了以后再把便条撤销

if (milk == 0) {if (note == 0) {note = 1;++milk;note = 0;}
}

但是这种做法是错误的,反例如下
在这里插入图片描述

方案二

使用两个标签
在这里插入图片描述
满足条件一,但是不满足条件二,可能会两个人都互相等待对方去买

方案三

方案二失败的根源在于他是一个对称标记,为了解决这个问题我们可以用非对称标记
在这里插入图片描述
除了以上方法,还可以参考Peterson算法peterson算法wiki
扩展到n个线程,可以使用面包店算法
在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部