在c++11併發學習之四:執行緒同步(續)中實際上用條件變數實現了乙個簡單的單生產者-單消費者模型,也就是乙個生產者和乙個消費者。
本文將實現單生產者-多消費者模型、多生產者-單消費者模型和多生產者-多消費者模型。前兩種實際上是簡化版的多生產者-多消費者,因此只需要實現第三種。
#include #include #include #include #include int counter=0;
int maxsize = 30;
std::mutex mtx;
std::queuedataquene; // 被生產者和消費者共享
std::condition_variable producer, consumer; // 條件變數是一種同步機制,要和mutex以及lock一起使用
void func_consumer()
); // 消費者阻塞等待, 直到佇列中元素個數大於0
int num=dataquene.front();
dataquene.pop();
std::cout << "consumer " << std::this_thread::get_id() << ": "<< num
producer.wait(lck, );// 生產者阻塞等待, 直到佇列中元素個數小於maxsize
++counter;
dataquene.push(counter);
std::cout << "producer " << std::this_thread::get_id() << ": "<< counter 執行結果
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 併發程式設計(五) 生產者 消費者
生產者 消費者 producer consumer 也叫有限緩衝 bounded buffer 是多執行緒同步的經典問題之一。詳見 wikipedia。改寫自 boost.thread 自帶的示例 libs thread example condition.cpp 以 條件變數 實現同步。inclu...