以下是解决“牛奶过多问题”的简单方法
lock mutex;
while (1){
lock_acquire(mutex);
if (no milk)
go and buy milk;//action-1
lock_release(mutex);
}
问题在于,action-1可能需要花费大量时间才能完成,这使得等待获取互斥量的任何进程都需要等待很长时间。
避免这种情况的一种方法是设置一个计时器,这样一旦计时器关闭,购买牛奶的过程就会在有或没有牛奶的情况下返回。如您所见,这有问题。 (例如:无法确定该过程是否已经购买了牛奶并正在回家)
有更好的解决方案吗?
答案 0 :(得分:0)
现实生活中的解决方案是留下您要去买牛奶的记录。
现在,在编程中,这并不能完全解决问题,只能缓解竞争状况的风险,因为杰克和吉尔都在冰箱空着时看着冰箱,都留下了笔记。但是,如果您将“如果没有牛奶和没有笔记的离开便条”部分锁定,那么您就可以开始工作了。与外出购买牛奶相比,离开便签的时间非常短。