У меня есть следующий «потребительский» код:
....
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», как получается, что потребляется только один?
Спасибо,
Li