编写程序,创建生产者线程和消费者线程以及大小为7的缓冲区,生产者每隔1-3s就生产一个数字并放入缓冲区,如果缓冲区已满则等待;消费者每隔1-3s从缓冲区里取出生产日期最新的数字进行消费,如果缓冲区已空就等待。
时间: 2024-09-28 14:13:15 浏览: 27
这是一个典型的生产者-消费者模型的问题,通常会在并发编程和线程池设计中遇到。在这里,我们可以使用Python的`threading`模块来实现这个场景:
首先,我们需要定义两个类:`Producer`作为生产者线程,`Consumer`作为消费者线程,以及一个`Buffer`类表示共享的缓冲区。
```python
import threading
import time
from collections import deque
class Buffer(deque):
def __init__(self, capacity=7):
super().__init__(maxlen=capacity)
class Producer(threading.Thread):
def __init__(self, buffer):
threading.Thread.__init__(self)
self.buffer = buffer
self.interval = random.randint(1, 3) # 生产间隔范围
def run(self):
while True:
time.sleep(self.interval)
if len(self.buffer) < Buffer.maxsize:
self.buffer.append(time.time())
print(f"Produced: {time.time()}")
class Consumer(threading.Thread):
def __init__(self, buffer):
threading.Thread.__init__(self)
self.buffer = buffer
self.interval = random.randint(1, 3) # 消费间隔范围
def run(self):
while True:
time.sleep(self.interval)
if len(self.buffer) > 0:
item = self.buffer.popleft()
print(f"Consumed: {item}")
else:
print("Buffer is empty.")
# 创建缓冲区
buffer = Buffer()
# 创建生产者和消费者线程,并启动它们
producer = Producer(buffer)
consumer = Consumer(buffer)
producer.start()
consumer.start()
```
在这个例子中,生产者和消费者线程都是无限循环运行,直到手动停止。生产者每次睡眠后都会尝试添加数字到缓冲区,而消费者则是睡眠后检查是否有新的元素可供消费。如果缓冲区满了,生产者会等待;如果缓冲区为空,消费者会等待。
阅读全文