例2-7编写程序,使用两个Event对象同步生产者-消费者问题。如果缓冲区满则生产者等待,若空则生产者往缓冲区放置物品至缓冲区满;如果缓冲区空则消费者等待,若满则消费者从缓冲区获取物品进行消费直至缓冲区空。问如何实现了线程的同步?分析程序代码且运行结果Python
时间: 2024-09-19 16:15:26 浏览: 38
VC中的生产和消费问题.rar_vc 算法_生产 消费_生产者和消费者_生产者和消费者问题_生产者消费者
在Python中,我们可以使用`threading`模块以及`Queue`(也称为`queue`)类来解决生产者-消费者问题并实现线程同步。这里是一个简单的例子:
```python
import threading
from queue import Queue
# 生产者函数
def producer(q):
item = 0
while True:
if q.full(): # 如果队列已满,生产者等待
print(f"Producer waiting, buffer is full ({q.qsize()})")
q.join() # 等待队列为空
else:
q.put(item) # 生产物品到队列
print(f"Produced item {item}, buffer size: {q.qsize()}")
item += 1
# 消费者函数
def consumer(q):
while True:
if not q.empty(): # 如果队列为空,消费者等待
print(f"Consumer waiting, buffer is empty ({q.qsize()})")
q.get() # 获取队列中的物品
else:
print("Consumed an item from the buffer")
q.task_done() # 标记任务已完成
# 创建队列(默认大小5)
buffer_size = 5
buffer = Queue(buffer_size)
# 创建生产者和消费者线程
producer_thread = threading.Thread(target=producer, args=(buffer,))
consumer_thread = threading.Thread(target=consumer, args=(buffer,))
# 启动线程
producer_thread.start()
consumer_thread.start()
# 等待所有队列任务完成
buffer.join()
print("All items processed, exiting threads")
阅读全文