import threading, time# 使用条件变量时需要注意的是,如果存在多个线程等待同一个条件,notify()操作可能唤醒它们# 中的一个或多个(这种行为通常取决于底层的操作系统)。因此,始终有这样的可能:某个线程被唤# 醒后,却发现它等待的条件不存在了。这解释了为什么在consumer()函数中使用while循环。如果线# 程醒来,但是生成的项已经消失,它就会回去等待下一个信号。item = False# 生产者def producer(name, sleeptime):global itemwhile True:cond.acquire() #获取锁item = Truecond.notify() #唤醒其他线程#cond.notify_all()print("|||||", name)cond.release() #释放锁time.sleep(sleeptime)# 消费者def consumer(name):global itemwhile True:cond.acquire() #获取锁x = 0while not item:x += 1if x > 1:print("~~~~~~~",x)cond.wait() #释放锁-睡眠-获取锁item = Falseprint(name)cond.release() #释放锁cond = threading.Condition()threading.Thread(target=consumer, args=("A",), daemon=True).start()threading.Thread(target=consumer, args=("B",), daemon=True).start()threading.Thread(target=consumer, args=("C",), daemon=True).start()threading.Thread(target=consumer, args=("D",), daemon=True).start()time.sleep(1)threading.Thread(target=producer, args=("P1", .1,), daemon=True).start()threading.Thread(target=producer, args=("P2", .2,), daemon=True).start()time.sleep(20)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。