【发布时间】:2012-09-11 18:11:47
【问题描述】:
我尝试实现阻塞队列。主要部分如下(这是一种教育任务)
template <typename T>
class Blocking_queue
{
public:
std::queue<T> _queue;
boost::mutex _mutex;
boost::condition_variable _cvar;
void Put(T& object);
T Get();
void Disable()
};
template<typename T>
void Blocking_queue::Put(T& object)
{
boost::mutex::scoped_lock lock(_mutex);
_queue.push(T);
lock.unlock();
_cvar.notify_one();
}
template<typename T>
T Blocking_queue::Get()
{
boost::mutex::scoped_lock lock(_mutex);
while(_queue.empty())
{
_cvar.wait(_mutex);
}
T last_el = _queue.front();
_queue.pop();
return last_el;
}
template<typename T>
void Blocking_queue::Disable()
{
}
我需要实现一个函数 Disable() “释放”所有等待的线程(如任务中所写)。问题是我不完全理解这个术语中的“释放”是什么意思,我应该应用什么方法。所以我的想法 - 如下:当 Disable() 被调用时,我们应该在这个地方(循环内)为当前线程调用一些方法
while(_queue.empty())
{
//here
_cvar.wait(_mutex);
}
这将释放当前线程,对吗?谢谢。
【问题讨论】:
-
阅读条件变量。
-
如果队列“禁用”并且为空,
Get应该怎么做? -
如果队列被禁用 Get 应该返回 null
标签: c++ multithreading boost boost-thread