华工计算机辅修OS的实验二的问题1,不让用Python写
不过还是写了~~~
import threading
import time
import random
#假设初始时无货物,货物架大小为30
n=30
empty,full,mutex=threading.Semaphore(30),threading.Semaphore(0),threading.Semaphore(1)
def producer(i,goods):
while(1):
empty.acquire()
mutex.acquire()
goods.append(0)
print("第{}个生产者把{}个货物上架了".format(i,len(goods)))
mutex.release()
full.release()
time.sleep(random.randint(1,3))
def consumer(i,goods):
while(1):
full.acquire()
mutex.acquire()
del goods[-1]
print("第{}个消费者把第{}个货物下架了".format(i,len(goods)+1))
time.sleep(1)
mutex.release()
empty.release()
time.sleep(random.randint(1, 9))
if __name__ == '__main__':
goods = []
for i in range(5):
threading.Thread(target=producer,args=(i,goods)).start()
for i in range(4):
threading.Thread(target=consumer,args=(i,goods)).start()
具体的互斥信号量同步信号量的教材有详细的解释