UML:
BlockingQueue
这是一个用std::deque设计的线程安全的队列,其实要想简单的保证队列的线程安全,只需要在读写的时候加上锁就行啦。为了提高效率,这里引入了条件变量。产生的效果就是,当读出数据时,发现这个队列是空的,就把这个线程挂起到条件变量上,当写入数据的时候就唤起所有正在等待条件变量的线程。写法如下:
void put(const T& x)
{
MutexLockGuard lock(mutex_); //往队列中加入元素时,需要加锁保护
queue_.push_back(x);
notEmpty_.notify(); // wait morphing saves us //加入元素后,通知需要读取线程
// http://www.domaigne.com/blog/computing/condvars-signal-with-mutex-locked-or-not/
}
void put(T&& x) //如果加入的元素,为右值时,用这种重载的函数
{
MutexLockGuard lock(mutex_);
queue_.push_back(std::move(x)