信号量解决生产者消费者问题python
时间: 2023-10-12 17:14:34 浏览: 251
可以使用 Python 的 threading 模块以及 queue 模块来实现生产者消费者问题的信号量解决方案。具体实现可以参考以下代码示例:
```python
import threading
import queue
MAX_SIZE = 10
queue = queue.Queue(MAX_SIZE)
# producer and consumer semaphores
prod_sem = threading.Semaphore(MAX_SIZE)
cons_sem = threading.Semaphore(0)
class Producer(threading.Thread):
def run(self):
while True:
# acquire producer semaphore
prod_sem.acquire()
item = produce_item()
# add item to queue
queue.put(item)
print(f"Produced item: {item}")
# release consumer semaphore
cons_sem.release()
class Consumer(threading.Thread):
def run(self):
while True:
# acquire consumer semaphore
cons_sem.acquire()
item = queue.get()
consume_item(item)
print(f"Consumed item: {item}")
# release producer semaphore
prod_sem.release()
# helper functions
def produce_item():
# create item here
return item
def consume_item(item):
# consume item here
pass
# start producer and consumer threads
Producer().start()
Consumer().start()
```
该示例使用 Python 的多线程实现生产者消费者问题的信号量解决方案。生产者线程在生产一个新的商品时获取生产者信号量,将商品添加到队列中,并释放消费者信号量,表示队列中有新商品可以被消费者线程获取。消费者线程在获取新商品时获取消费者信号量,从队列中获取商品并进行消费,然后释放生产者线程信号量,表示队列中有新空间可以被生产者线程使用。这样可以保证生产者和消费者线程不会重复使用已经被生产或消费的商品或队列空间。
阅读全文