阻塞佇列主要用於執行緒和執行緒之間的通訊。當隊列為空時,從佇列中獲取元素的執行緒將會被掛起;當佇列是滿時,往佇列裡新增元素的執行緒將會掛起。
本文使用c++ 11中的多執行緒庫,實現了乙個帶有最大容量的阻塞佇列。**使用visual c++ 2015編寫。
blockqueue.hpp
#pragma once
#include #include #include templateclass blockqueue
size_t size()
void push_back(const t &item)
}m_list.push_back(item);
m_notempty.notify_all();
} t pop()
t temp = *m_list.begin();
m_list.pop_front();
m_notfull.notify_all();
lock.unlock();
return temp;
} bool empty()
bool full()
tlock lock(m_mutex);
return m_list.size() >= m_maxcapacity;
}private:
bool hascapacity() const
typedef std::dequetlist;
tlist m_list;
const int m_maxcapacity;
std::mutex m_mutex;
std::condition_variable m_notempty;
std::condition_variable m_notfull;
};
#include #include #include #include "blockqueue.hpp"
using namespace std;
typedef blockqueuetqueue;
void produce(tqueue &queue)
}void consume(tqueue &queue)
}int main()
阻塞佇列實現
0前言 1實現原始碼 1.1 鎖封裝 通過訊號量保證不同執行緒之間資料操作的一致性。class csemaphore csemaphore void produce void consume bool try return true bool trytime int micsec int ret s...
C 11 執行緒池實現
c 11中已經新增了跨平台的thread相關工具,在一些輕量級使用場景中,使用std thread無疑會給我們帶來很多方便。這裡使用它實現了乙個簡單的執行緒池 easythreadpool.h ifndef easy thread pool h define easy thread pool h i...
使用C 11移動複製
製作乙個可移植的使用右值引用的類 c 11標準的最大功能之一是右值引用。此功能允許修改臨時物件,從它們那裡 偷 資源。在c 03中沒有有值引用,但使用boost.move庫,可以寫一些可移植的使用右值引用的 左值 乙個函式或者物件例項。失效值 生命期即將結束的物件。廣義左值 包括左值和失效值。右值 ...