嗨快速问题给予以下c + + 11代码,它适用于生产者/消费者,罚款是我想关闭DataQueue并停止所有消费者。虽然问题在于问题在于消费者只是称为popWait()并且可以被阻止。在这种情况下,如何关闭我的客户?这可能是一个需要纠正的设计问题。我试图不引起任何性能命中,因为此代码应理想地使用干扰模式或类似的方式使队列锁定为空闲状态。因为它可能是我想知道是否有简单的东西让消费者知道在生产者关闭时停止调用pop等待功能。如果队列中还有数据需要等待消费者完成数据撤销,那么棘手的部分就是关闭。我相信我有一个解决方案,消费者可以自行关闭,但可以接受想法。提前致谢。生产者消费者线程与关机c + +
#ifndef __DataQueue_h__
#define __DataQueue_h__
#include <mutex>
#include <queue>
#include <condition_variable>
#include <chrono>
template <typename DataT>
class DataQueue
{
public:
DataQueue(): _shutdown(false), _waitTime(5), _itemAvailable() {}
void push (const DataT& data)
{
std::unique_lock<std::mutex> lock(_mutex);
queue.push(data);
_itemAvailable.notify_one();
}
// worked fine until I need to shutdown services... then some were blocked
DataT popWait()
{
std::unique_lock<std::mutex> lock(_mutex);
if(queue.empty())
{
_itemAvailable.wait(lock);
}
DataT temp(queue.front());
queue.pop();
return temp;
}
inline void shutdown()
{
_shutdown = true;
}
private:
std::queue<DataT> queue;
bool _shutdown;
unsigned int _waitTime;
std::mutex _mutex;
std::condition_variable _itemAvailable;
};
#endif
等待等待通知... notify_one通知一个... notify_all通知所有服务员... – kfsone