监视同步:实现多个条件变量

2024-05-19 17:38:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在实现监视器同步。我想知道多个变量是如何实现的。 因此,条件变量具有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队列中的内容,还是存在一个与锁相关联的组合队列。在


Tags: 方法truelockfoo队列defwithbar
1条回答
网友
1楼 · 发布于 2024-05-19 17:38:34

A.notifyAll()应该只唤醒运行foo()的线程。线程所在的等待队列是条件变量的一部分,而不是。锁确实有自己的等待队列,但它只被试图获取锁的线程使用。当你的线程在CV中休眠时,它不持有锁,并且在另一个线程调用notify()或类似的函数之前不会尝试重新获取它。在

也就是说,您应该编写代码来假设B.wait()实际上可以随时唤醒。实际上,这意味着重新检查线程正在等待的条件:

    with lock:
        while not ready:
            B.wait()
        # Do stuff with protected data

相关问题 更多 >