【发布时间】:2014-10-24 17:39:38
【问题描述】:
我在这里看到以下代码: https://docs.python.org/2/library/threading.html#condition-objects
# Consume one item (thread 1)
cv.acquire()
while not an_item_is_available():
cv.wait()
get_an_available_item()
cv.release()
# Produce one item (thread 2)
cv.acquire()
make_an_item_available()
cv.notify()
cv.release()
我的问题是,当在线程 2 中调用 cv.notify() 时,线程 1 从 cv.wait() 中唤醒,但在线程 2 调用 cv.release() 之前,线程 1 没有获取锁(我说的对吗?)。 .我的问题是:在调用cv.notify() 和从线程2 调用cv.release() 之前线程1 的行为是什么?
更新:
我从https://stackoverflow.com/a/17337630/1497720 找到的,但它是用于 java 的:
这维护了两个数据结构——一个等待集和一个入口集。 等待线程被添加到等待集中并停放,而线程 尝试获取监视器被添加到条目集中,然后 停放。在通知时,从等待集中取出一个线程并将其添加到 入口集。当一个线程释放锁时,它会释放一个线程 条目集(如果有)。请注意,这些集合实际上是 以队列(链表)的形式实现,因此以 FIFO 为基础进行处理。
【问题讨论】:
标签: python multithreading python-2.7 synchronization locking