我正在实现监视器同步。我想知道多个变量是如何实现的。 因此,条件变量具有wait()方法,该方法将其放入与该条件变量绑定的特定锁的等待队列中。所以,如果我有多个条件变量,每个等待调用是否都会创建自己独立的等待队列? 例如,如果我有:
lock = Lock()
A = Condition(lock)
B = Condition(lock)
C = Condition(lock)
def foo:
with lock:
while true:
A.wait()
def bar:
with lock:
while true:
B.wait()
def notifyA
with lock:
A.notifyAll()
所以我的问题是,当我们执行A.notifyAll()时,它是只唤醒A.wait队列中的内容,还是存在一个与锁相关联的组合队列。在
A.notifyAll()
应该只唤醒运行foo()
的线程。线程所在的等待队列是条件变量的一部分,而不是锁。锁确实有自己的等待队列,但它只被试图获取锁的线程使用。当你的线程在CV中休眠时,它不持有锁,并且在另一个线程调用notify()
或类似的函数之前不会尝试重新获取它。在也就是说,您应该编写代码来假设
B.wait()
实际上可以随时唤醒。实际上,这意味着重新检查线程正在等待的条件:相关问题 更多 >
编程相关推荐