利用and信号量解决生产者消费者问题要求多个消费者多个生产者
时间: 2024-10-20 18:19:18 浏览: 27
利用`and`信号量(也称为二元信号量或互斥信号量)可以解决多生产者多消费者(MPMC, Multiple Producer Multiple Consumer)问题,特别是在资源有限的场景下。`and`信号量允许一次只有一个进程进入临界区,即只有一个生产者或消费者能访问共享资源。当多个消费者需要服务时,生产者必须等待当前正在使用的消费者完成;反之亦然。
以下是一个简化版的示例,说明如何用`and`信号量解决生产者消费者问题:
```python
from threading import Thread, BoundedSemaphore
# 定义信号量
producer_semaphore = BoundedSemaphore(1) # 只允许一个生产者同时工作
consumer_sema1, consumer_sema2 = BoundedSemaphore(0), BoundedSemaphore(0) # 分别用于指示消费者槽位空闲
def producer(buffer):
while True:
with producer_semaphore:
buffer.append("Produced") # 生产数据
consumer_sema1.release() # 通知第一个消费者槽位可用
def consumer(buffer, semaphore):
while True:
semaphore.acquire() # 获取信号量
if not buffer: # 如果缓冲区为空,则停止消费
break
print(f"Consuming: {buffer.pop(0)}") # 消费数据
consumer_sema2.release() # 通知下一个消费者槽位可用
buffer = []
threads = [Thread(target=producer, args=(buffer,)),
Thread(target=consumer, args=(buffer, consumer_sema1)),
Thread(target=consumer, args=(buffer, consumer_sema2))]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
阅读全文