また、生産者 - 消費者問題として知られている有界バッファ問題は、容易にセマフォを使用して解決することができます。C ++では、そこにはセマフォではないが、我々は代わりに、条件変数を使用することができます。
書式#include <スレッド> の#include <ミューテックス> 書式#include <condition_variable> 使用して 名前空間はstd; クラスBoundedBuffer { プライベート: 両端キュー < 整数 > バッファ; int型のサイズ= 10 ; ミューテックスM。 condition_variable CV; 公共: BoundedBuffer(){}。 ボイド農産物(int型NUM){ unique_lockの <ミューテックス> ロック(M)。 cv.wait(ロック、[ これ ](){ 戻り buffer.size()< サイズ;}); buffer.push_back(NUM)。 裁判所未満 << " 生産" << NUM << ' \ nを' ; cv.notify_all(); } INT 消費(){ unique_lockの <ミューテックス> ロック(M)。 cv.wait(ロック、[ これ ](){ 戻り buffer.size()> 0 ;}); INT RES = buffer.front()。buffer.pop_front(); 裁判所未満 << " 消費" << RES << ' \ nを' ; cv.notify_all(); リターンのres; } }。 INT {main()の BoundedBufferのBF。 自動プロデューサ = [&]()は、{ ため(int型 i = 0 ; iは< 5 ; ++ I)bf.produce(I)。 }。 自動消費者 = [&](){ ため(int型 i = 0 ; iは< 5 ; ++ I)bf.consume(); }。 スレッドproducer_thread(プロデューサー)。 スレッドconsumer_thread(消費者)。 producer_thread.join(); consumer_thread.join(); リターン 0 ; }
参照
https://codereview.stackexchange.com/questions/84109/a-multi-threaded-producer-consumer-with-c11