问题:
搬运工人向卡车中装纯净水,每车最多10箱。卡车装满即开走,需装n辆车。
import random
import threading
import time
water= threading.Semaphore(0);
go= threading.Semaphore(0);
mutex=threading.Event()
wmutex=threading.Event()
mutex.set()
wmutex.set()
def worker():
global water,wmutex,mutex,go
i=0
while(1):
water.acquire() #每次工人搬水,水的位置减少1
wmutex.clear() #in计数互斥
i=i+1
print("装水" + str(i))
if(i>=10):
i=0
go.release() #水装满,可以开走
wmutex.set()
time.sleep(random.random())
def car():
global water,wmutex,mutex,go
while(1):
mutex.clear() #卡车之间互斥
print("车来啦!")
for j in range(0,10):
water.release() #每次车来,都会释放10个可以放水的位置
go.acquire() #等到worker装满水才可以走
print("车开走啦!")
mutex.set()
time.sleep(random.random())
if __name__=='__main__':
worker=threading.Thread(name='Worker',target=worker)
car=threading.Thread(name='Car',target=car)
#启动线程
car.start()
worker.start()
运行结果:
伪代码: