问题描述:
系统中由多个生产者进程和多个消费者进程,共享一个能存放10件产品的环形缓冲区(初始值为空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;当缓冲区未空时,消费者进程可以从缓冲区取走一件产品,否则等待。要求一个消费者进程从缓冲区连续取出3件产品后,其他消费者进程才可以取产品。
import random
import threading
import time
empty=threading.Semaphore(10) # 创建信号量empty表示可以防止产品的位置,并赋初值为10
full=threading.Semaphore(0) # 被占满的空(物品)的信号量
mutex=threading.Event() # 生产者与消费者互斥信号量
mutex1=threading.Event() # 消费者之间互斥信号量
#lock=threading.Lock();
mutex.set() #设标志为True
mutex1.set()
def producer():
global empty,mutex,lock,full
i=1
while(i<=15): # 控制生产者执行次数
empty.acquire() # 容量empty减去1
mutex.clear() # mutex设置为False,其他线程等待
print("生产!" + str(i))
i+=1
mutex.set() # mutex设置为True, 其它线程可以使用
full.rele