1

以下是“牛奶过多问题”的简单解决方案

    lock mutex;

    while (1){

        lock_acquire(mutex);

        if (no milk)
            go and buy milk;//action-1

        lock_release(mutex);
    }

问题是,action-1 可能需要很长时间才能完成,使得任何等待获取互斥锁的进程都等待很长时间。

避免这种情况的一种方法是设置一个计时器,以便一旦计时器关闭,购买牛奶的过程将返回有或没有牛奶。如您所见,这样做存在问题。(例如:无法确定该过程是否已经购买了牛奶并在回家的路上)

有没有更好的解决方案?

编辑牛奶过多的问题

4

1 回答 1

0

现实生活中的解决办法是留下一张便条,说明你出去买牛奶了。

现在,在编程中,这并不能完全解决问题,只是降低了竞争条件的风险,因为 Jack 和 Jill 都在冰箱空了的时候看着冰箱,然后都留下了便条。但是,如果您将 leave-note-if-no-milk-and-no-note 部分锁定,那么您就设置好了。与出去买牛奶相比,留下纸条所需的时间非常短。

于 2019-01-11T21:16:57.420 回答