计算机操作系统实验,进程同步问题,使用python实现
效果如下

代码如下
import time
from threading import Thread
from prettytable import PrettyTable
c = int(input("请输入缓冲区个数:"))
cache = []
lock = []
for x in range(c): # 初始化缓冲区和锁
lock.append(0)
cache.append(0)
p = int(input("请输入生产者个数:"))
cu = int(input("请输入消费者个数:")) # 从键盘读入生产者和消费者数量
# print(cache, p, cu, lock)
infotable = PrettyTable(["CACHE", "PRODUCER", "CONSUMER"]) # 用表格更美观显示当前情况
infotable.add_row([c, p, cu])
print(infotable)
def producer(name): # 生产者
while True:
for i in range(c):
if cache[i] == 0:
if lock[i] == 0:
lock[i] = 1
print(f"生产者{name}号生产了一件产品放在{i}号缓冲区")
cache[i] = 1
lock[i] = 0
time.sleep(1)
break
if i == c-1 and i != 0: # 没找到可用缓冲区
print("缓冲区已满,等待2s")
time.sleep(2)
if STOP_THREADS:
break
def consumer(name): # 消费者
while True:
for i in range(c):
if cache[i] == 1:
if lock[i] == 0:
lock[i] = 1
print(f"消费者{name}号从缓冲区{i}号消费了一件产品")
cache[i] = 0
lock[i] = 0
time.sleep(1)
break
if i == c-1 and i != 0:
print("缓冲区已空,等待2s")
time.sleep(2)
if STOP_THREADS:
break
STOP_THREADS = False # 信号量控制结束
pthreads = []
cthreads = []
for y in range(p):
pthreads.append(Thread(target=producer, args=f"{y}")) # 批量创建线程
y = 0
for y in range(cu):
cthreads.append(Thread(target=consumer, args=f"{y}")) # 创建线程
# print(pthreads,cthreads)
print("启动")
y = 0
for y in range(p):
pthreads[y].start() # 批量启动线程
time.sleep(0.1)
y = 0
for y in range(cu):
cthreads[y].start() # 启动线程
time.sleep(0.1)
time.sleep(3)
STOP_THREADS = True
time.sleep(1) # 等待1s确认都执行完毕后输出结束
print("结束")

被折叠的 条评论
为什么被折叠?



