C 11併發學習之五 生產者與消費者

2021-07-24 15:38:10 字數 895 閱讀 4124

在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...