编写程序,创建生产者线程和消费者线程以及大小为5的缓冲区。生产者每隔1至3秒钟就生产一个数字并放入缓冲区,如果缓冲区已满则等待;消费者每隔1至3秒就从缓冲区里取出生产日期较早的数字进行消费,如果缓冲区已空就等待。运行程序,观察并理解缓冲区内数字变化以及生产者线程和消费者线程之间的同步。
时间: 2023-11-27 11:49:01 浏览: 28
生产者消费者多线程程序
以下是使用Python实现的代码:
```python
import threading
import time
import random
BUFFER_SIZE = 5 # 缓冲区大小
buffer = [] # 缓冲区
lock = threading.Lock() # 互斥锁
# 生产者线程
class Producer(threading.Thread):
def run(self):
global buffer
while True:
num = random.randint(1, 100) # 随机生成一个数字
lock.acquire() # 获取互斥锁
if len(buffer) < BUFFER_SIZE:
buffer.append(num) # 将数字放入缓冲区
print(f"生产者生产了数字 {num},现在缓冲区内数字有:{buffer}")
lock.release() # 释放互斥锁
time.sleep(random.randint(1, 3)) # 随机休眠1至3秒
# 消费者线程
class Consumer(threading.Thread):
def run(self):
global buffer
while True:
lock.acquire() # 获取互斥锁
if len(buffer) > 0:
num = buffer.pop(0) # 从缓冲区取出生产日期较早的数字
print(f"消费者消费了数字 {num},现在缓冲区内数字有:{buffer}")
lock.release() # 释放互斥锁
time.sleep(random.randint(1, 3)) # 随机休眠1至3秒
# 创建生产者和消费者线程并启动
producer = Producer()
consumer = Consumer()
producer.start()
consumer.start()
```
运行以上代码,可以观察到生产者每隔1至3秒就生产一个数字并放入缓冲区,如果缓冲区已满则等待;消费者每隔1至3秒就从缓冲区里取出生产日期较早的数字进行消费,如果缓冲区已空就等待。通过使用互斥锁,保证了生产者和消费者线程之间的同步,防止了多个线程同时访问缓冲区而导致的数据不一致问题。
阅读全文