原文转自:http://www.tanjp.com (即时修正和更新)
多线程安全的先进先出队列
多线程安全的队列,可支持临界条件的阻塞与非阻塞两种模式切换。可通过条件变量来挂起等待加入/取出,条件满足时又能即时唤醒加入/取出。
思路和想法都比较简单,就是一些应用的方法,就不多说了,直接看代码很好了解。
template<typename tpType>
class SafeQueue
{
static const uint32 kDefaultMaxsize = 4294967290U; //容量上限
public:
explicit SafeQueue(bool pb_block = true, uint32 pn_maxsize = kDefaultMaxsize)
: mb_block(pb_block)
, mn_maxsize(pn_maxsize > 0 ? pn_maxsize : kDefaultMaxsize)
, mc_queue()
, mb_push_waiting(0)
, mb_pop_waiting(0) { }
~SafeQueue() { }
bool push(const tpType & po_val)
{
{
std::lock_guard<std::mutex> lock(mo_mutex);
while ((mc_queue.size() >= mn_maxsize) && mb_block)
{
++mb_push_waiting;
mo_cond_push.wait(mo_mutex);
--mb_push_