多线程PC过程模拟
注意点:
1)首先通过信号量来判断是否运行该段程序。如果信号量是0,则阻塞一下。否则,把信号量p一下。
2)完成任务后,把信号量v一下。
3)记住先p后v的口诀。
import threading
import numpy as np
class Product_Consume():
def __init__(self):
self.write_signal = 1
self.read_signal = 0
self.buffer = 0
def _p_write(self):
while True:
if self.write_signal > 0:
self.write_signal -= 1
break
def _p_read(self):
while True:
if self.read_signal > 0:
self.read_signal -= 1
break
def _v_write(self):
self.write_signal += 1
def _v_read(self):
self.read_signal += 1
def write(self):
while True:
print('---Task Begin---')
num = np.random.random()
self._p_write()
self.buffer = num
print("Writing A := ", self.buffer)
self._v_read()
def read(self):
while True:
self._p_read()
print("Reading A := ", self.buffer)
self._v_write()
print('---Task End---')
def __call__(self):
read_thread = threading.Thread(target=self.read)
write_thread = threading.Thread(target=self.write)
read_thread.start()
write_thread.start()
pc = Product_Consume()
pc()