最近学习Python的多线程,遇到一个小题目,练习练习QwQ,题目如下:
有两个缓冲区A和B,A的容量为6,B的容量为5,有3个操作Put,Move,Get,分别表示放一个东西到A中,将一个东西从A搬到B,从B中取出一个东西。
实现代码如下:
import threading
import time
Aempty = threading.Semaphore(6)
Afull = threading.Semaphore(0)
Amutex = threading.Semaphore(1)
Bempty = threading.Semaphore(5)
Bfull = threading.Semaphore(0)
Bmutex = threading.Semaphore(1)
def Put():
for i in range(200):
Aempty.acquire()
Amutex.acquire()
print("Put an apple into A")
Amutex.release()
Afull.release()
def Move():
for i in range(200):
Afull.acquire()
Bempty.acquire()
Amutex.acquire()
Bmutex.acquire()
print("Move an apple from A to B")
time.sleep(0.1)
Amutex.release()
Bmutex.release()
Aempty.release()
Bfull.release()
def Get():
for i in range(200):
Bfull.acquire()
Bmutex.acquire()
print("Get an apple from B")
time.sleep(0.1)
Bmutex.release()
Bempty.release()
t1 = threading.Thread(target = Put)
t2 = threading.Thread(target = Move)
t3 = threading.Thread(target = Get)
t1.start()
t2.start()
t3.start()