生產者 消費者,使用C 11的版本

2021-07-15 20:48:58 字數 1558 閱讀 4716

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將乙個數值放到雙向佇列...