1.成员变量
BlockingQueue:无界缓冲区
BoundedBlockingQueue:有界缓冲区
- queue_:循环队列
2.生产者、消费者模型
利用信号量实现伪码:
//生产者
p(semFull) //查看队列是否有空间
lock(mutex)
queue.push(物品)
unlock(mutex)
v(semEmpty) //通知消费者有物品
//消费者
p(semEmpty) //查看对列中是否有物品
lock(mutex)
queue.pop()
unlock(mutex)
v(semFull) //通知生产者有空间
利用条件变量实现伪码:
//生产者
while(queue.full())
{
notFull.wait();
}
lock(mutex)
queue.push(物品)
unlock(mutex)
notEmpty.signal();
while(queue.empty())
{
notEmpty.wait();
}
lock(mutex)
queue.push(物品)
unlock(mutex)
notFull.signal();
- BlockingQueue类、BoundedBlockingQueue类中通过put()往(循环)队列中放元素,通过take()取元素
BlockingQueue类:
- 注:由于该类实现的队列无界,所以take()函数末尾无需向生产者信号
BoundedBlockingQueue类: