C ++ 11マルチスレッド - 生産消費者(条件変数)

また、生産者 - 消費者問題として知られている有界バッファ問題は、容易にセマフォを使用して解決することができます。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

おすすめ

転載: www.cnblogs.com/hankunyan/p/11669396.html
おすすめ