操作系统中进程同步生产者与消费者问题代码
时间: 2024-10-10 17:10:58 浏览: 16
操作系统中的生产者-消费者问题是一个经典的并发控制示例,它涉及到两个线程:生产者和消费者,它们共享一个缓冲区。生产者负责往缓冲区添加元素,而消费者则从缓冲区移除并处理元素。为了避免数据竞争和死锁,通常会使用互斥量(mutex)、条件变量(condition variable)等同步机制。
下面是一个简单的Python代码实现,使用了`threading`模块:
```python
import threading
import queue
# 定义缓冲区大小
BUFFER_SIZE = 5
buffer = queue.Queue(BUFFER_SIZE)
# 生产者线程
def producer(queue):
for i in range(10):
if not queue.full():
with queue.mutex:
# 获取锁,检查队列是否已满
queue.put(i)
print(f"Producer added item {i} to the queue")
# 释放锁
queue.notify()
# 消费者线程
def consumer(queue):
while True:
with queue.mutex:
if not queue.empty():
# 如果队列非空,获取下一个元素并处理
item = queue.get()
print(f"Consumer consumed item {item}")
else:
# 队列为空,等待生产者放入元素
queue.wait()
# 创建并启动生产者和消费者线程
producer_thread = threading.Thread(target=producer, args=(buffer,))
consumer_thread = threading.Thread(target=consumer, args=(buffer,))
producer_thread.start()
consumer_thread.start()
# 等待所有线程结束
producer_thread.join()
consumer_thread.join()
```
在这个例子中,`queue`充当了缓冲区的角色,`mutex`用于保护对缓冲区的访问,`wait()`和`notify()`分别用于线程阻塞和唤醒。