用代码模拟单阻塞队列
时间: 2024-09-24 10:10:05 浏览: 63
java模拟阻塞队列
在计算机程序设计中,单阻塞队列(Single-Producer Single-Consumer Queue,简称SPSC)是一种特殊的线程同步数据结构,它只允许一个生产者线程向队列添加元素,而只有一个消费者线程可以从队列中取出元素。当队列为空时,消费者会阻塞;同样,当队列满时,生产者会等待。这里是一个简单的Python实现,使用`queue`模块:
```python
import queue
class SingleBlockingQueue:
def __init__(self, capacity):
self.queue = queue.Queue(capacity)
self.not_empty = queue.Condition()
self.not_full = queue.Condition()
def put(self, item):
with self.not_full:
while not self.queue.full():
self.queue.put(item)
self.not_full.notify_all() # 队列不满,唤醒所有等待的消费者
else:
self.not_full.wait() # 队列已满,消费者等待
def get(self):
with self.not_empty:
while not self.queue.empty():
self.not_empty.notify_all() # 队列非空,唤醒所有等待的生产者
item = self.queue.get()
else:
self.not_empty.wait() # 队列为空,生产者等待
return item
# 使用示例
q = SingleBlockingQueue(5)
# 生产者
for i in range(10):
q.put(i)
# 消费者
for _ in range(10):
print(q.get())
```
在这个例子中,`put`方法用于生产者添加元素,如果队列满则进入等待;`get`方法用于消费者取元素,如果队列空则等待。当队列状态改变时,通过条件变量通知其他线程。
阅读全文