multi-threading以及lambda是c++11的重要公升級,下面的經典的生產者-消費者的**,既使用了c++11的multi-threading相關的庫, 又使用了lambda。**中有注釋,應該比較詳細。
#include
#include
#include
#include
#include
using
namespace
std;
mutex mtx;
condition_variable produce, consume; // 條件變數是一種同步機制,要和mutex以及lock一起使用
queue
q; // shared value by producers and consumers, which is the critical section
int maxsize = 20;
void consumer()
); // wait(block) consumer until q.size() != 0 is true
cout
<< "consumer "
<< this_thread::get_id() << ": ";
q.pop();
cout
<< q.size() << '\n';
produce.notify_all(); // nodity(wake up) producer when q.size() != maxsize is true
}}void producer(int id)
); // wait(block) producer until q.size() != maxsize is true
cout
<< "-> producer "
<< this_thread::get_id() << ": ";
q.push(id);
cout
<< q.size() << '\n';
consume.notify_all(); // notify(wake up) consumer when q.size() != 0 is true
}}int main()
// join them back: (in this program, never join...)
for (int i = 0; i < 2; ++i)
system("pause");
return
0;}
生產者-消費者模型擴充套件
我的github裡的乙個專案:執行緒池(使用c++11)
為什麼條件變數和互斥鎖要在一起使用。這篇部落格使用類unix作業系統的posix multithreading,來講解條件變數(condition variable) 為什麼,以及怎麼和互斥鎖(mutex and lock)一起配套使用。
last update: 2017/7/27
c 11生產者消費者
綜合運用 c 11 中的新的基礎設施 主要是多執行緒 鎖 條件變數 來闡述乙個經典問題 生產者消費者模型,並給出完整的解決方案。include include include include include include static const int kitemrepositorysize 1...
c 11 生產者和消費者
include include include include using namespace std 定義兩個條件變數 佇列未滿 std condition variable queuenotfull 佇列不空 std condition variable queuenotempty 佇列鎖 st...
C 11實現簡單生產者消費者模式
當前c 11已經實現了多執行緒 互斥量 條件變數等非同步處理函式,並且提供了諸如sleep之類的時間函式,所以後面使用c 開發這一塊的時候完全可以實現跨平台,無需在windows下寫一套然後又在linux下寫一套了。本文用c 11實現了乙個簡單的生產者 消費者模式,生產者每1s將乙個數值放到雙向佇列...