条件变量 + 队列 实现生产消费者模型 代码
时间: 2024-09-20 14:01:45 浏览: 4
在实现生产者消费者模型时,条件变量和队列常常一起使用,尤其是在多线程环境下。这个模型描述了一个场景,其中有一些生产者线程负责生成数据放入队列,而其他消费者线程则从队列中取出并处理这些数据。以下是使用Python的`threading`模块以及`queue`(旧名`Queue`)类的一个简单示例:
```python
import threading
from queue import Queue
# 定义生产者函数
def producer(queue):
while True:
data = generate_data() # 模拟生成数据
with queue.not_empty:
queue.put(data)
queue.not_empty.notify_all()
# 定义消费者函数
def consumer(queue):
while True:
with queue.empty():
if not queue.get(block=True): # 如果队列为空,则等待
print("Queue is empty")
else:
process_data(queue.get()) # 处理数据
queue.task_done()
# 创建队列
queue = Queue()
# 创建生产者和消费者线程
producer_thread = threading.Thread(target=producer, args=(queue,))
consumer_thread = threading.Thread(target=consumer, args=(queue,))
# 启动线程
producer_thread.start()
consumer_thread.start()
# 等待所有任务完成
queue.join()
# 关闭线程
producer_thread.join()
consumer_thread.join()
```
在这个例子中,`not_empty`和`empty()`是条件变量,它们用于同步生产者和消费者之间的操作。当队列非空时,`not_empty`会被唤醒等待的消费者;当队列为空时,`empty()`会让等待的生产者继续。