我目前正在研究锁,我对以下使用锁来保护代码的关键部分的示例感到困惑。
这是我的问题:
如果存款功能首先获得锁定,这是否意味着删除功能必须等待存款功能释放锁定才能执行其他操作?换句话说,删除将被锁定在锁定状态 - >获取直到存款功能锁定 - >释放?
答案 0 :(得分:1)
请注意,您有多个actor: lock ,用于调用lock
操作,条件变量(名为notEmpty
和{ {1}}),notFull
因为问题是关于锁定,响应是 - 是
wait
将进入函数或从等待条件中唤醒并尝试获取锁定
无论如何,如果remove
函数正在使用它(也就是说它已锁定它,它已经获取它),deposit
函数将挂起该锁,直到它被释放(或者,甚至更好) ,remove
d)。
另请注意,当您在条件变量上release
时,锁定会在您唤醒后自动释放并重新获取。因此,该功能不是永远持有锁,就是这样。