【发布时间】:2011-04-13 20:35:58
【问题描述】:
我有以下“消费者”代码:
....
while 1:
time.sleep(self.sleeptime)
cond.acquire() #acquire the lock
print currentThread(), "lock acquired"
while itemq.isEmpty():
cond.wait()
itemq.consume()
print currentThread(),"Consumed One Item"
cond.release()
以及以下生产者的代码:
....
while 1 :
cond.acquire() #acquire the lock
print currentThread(), "lock acquired"
print currentThread(),"Produced One Item"
itemq.produce()
cond.notifyAll()
cond.release()
time.sleep(self.sleeptime)
我正在与 1 个生产者和 2 个消费者一起运行该程序。 我不知道会发生什么结果。生产者调用“notifyAll()”,所以我希望两个消费者都能从他们的“等待”中醒来。我看到确实两个消费者都获得了锁,但只有第一个获得锁的人才能真正使用该项目。有人可以告诉我“等待”命令是如何工作的吗?如果两个线程都得到了“notifyAll”,那怎么只有一个线程可以消费呢?
谢谢, 李
【问题讨论】:
-
提示:您应该接受更多答案以提高获得答案的机会。
-
我什至不知道有这种可能性:)
-
感谢上帝,它是可逆的。我以为我会被永远谴责:)
-
从来不明白这在 Python 中是如何工作的。如果在release()之前通知(),锁仍然被占用,你唤醒线程并且只有在释放条件的线程保持控制调用释放的情况下,任何在释放之前获得控制的唤醒线程都会进入睡眠状态在 notify() 之后立即。看起来 Python 中的原子性概念是相当“相对”的。
标签: python multithreading conditional-statements wait