使用线程实现生产者消费者问题
时间: 2024-05-10 10:19:34 浏览: 66
利用线程实现生产者消费者问题
生产者消费者问题是一个经典的同步问题,可以使用线程来实现。
以下是一个简单的示例代码:
```python
import threading
import time
queue = []
MAX_NUM = 10
lock = threading.Lock()
class ProducerThread(threading.Thread):
def run(self):
global queue
while True:
if len(queue) == MAX_NUM:
print("Queue is full, producer is waiting.")
else:
num = time.time()
lock.acquire()
queue.append(num)
print("Produced", num)
lock.release()
time.sleep(1)
class ConsumerThread(threading.Thread):
def run(self):
global queue
while True:
if not queue:
print("Queue is empty, consumer is waiting.")
else:
lock.acquire()
num = queue.pop(0)
print("Consumed", num)
lock.release()
time.sleep(2)
producer = ProducerThread()
consumer = ConsumerThread()
producer.start()
consumer.start()
producer.join()
consumer.join()
```
在这个示例代码中,我们创建了一个队列 `queue`,队列的最大长度为 `MAX_NUM`。我们还定义了一个锁 `lock`,用于保护队列的操作。
生产者线程 `ProducerThread` 不断地向队列中添加元素,如果队列已满,则等待;否则,生成一个随机数并添加到队列中。生产者线程每隔一秒钟执行一次。
消费者线程 `ConsumerThread` 不断地从队列中取出元素,如果队列为空,则等待;否则,取出队列中的第一个元素并打印出来。消费者线程每隔两秒钟执行一次。
最后,我们创建生产者和消费者线程,并启动它们。主线程等待生产者和消费者线程结束后再退出。
阅读全文