一个伙夫蒸馒头(生产者,售票),要求蒸够10个,等待,并唤醒吃馒头的人
三个吃货吃馒头(消费者,买票),要求同时吃,当任何一个人发现没馒头了,唤醒伙夫。
生产者是一堆线程,消费者是另一堆线程,内存缓冲区可以使用List数组队列,数据类型只需要定义一个简单的类就好。关键是如何处理多线程之间的协作。这其实也是多线程通信的一个范例。
在这个模型中,最关键就是内存缓冲区为空的时候消费者必须等待,而内存缓冲区满的时候,生产者必须等待。其他时候可以是个动态平衡。值得注意的是多线程对临界区资源的操作时候必须保证在读写中只能存在一个线程,所以需要设计锁的策略。
import threading
import time
lock1=threading.Lock()
lock2=threading.Lock()
s1=threading.Condition(lock=lock1) # 生产锁
s2=threading.Condition(lock=lock2) #吃的锁
list=[]
mt=None
class HuoFu(t