以下是“牛奶过多问题”的简单解决方案
lock mutex;
while (1){
lock_acquire(mutex);
if (no milk)
go and buy milk;//action-1
lock_release(mutex);
}
问题是,action-1 可能需要很长时间才能完成,使得任何等待获取互斥锁的进程都等待很长时间。
避免这种情况的一种方法是设置一个计时器,以便一旦计时器关闭,购买牛奶的过程将返回有或没有牛奶。如您所见,这样做存在问题。(例如:无法确定该过程是否已经购买了牛奶并在回家的路上)
有没有更好的解决方案?
编辑:牛奶过多的问题