【注意】C ++状態変数の和ミューテックス

(参考:https://www.cnblogs.com/haippy/p/3252041.html

std :: condition_variableは、条件変数です。待機関数はstd :: condition_variableオブジェクトが呼び出されると、それは(のstd ::ミューテックスを経由して)現在のスレッドをロックするのstd :: unique_lockのを使用しています。別のスレッドが現在のスレッドを目覚めさせるために同じのstd :: condition_variableオブジェクトに通知関数を呼び出すまで、現在のスレッドは常にブロックされます。

std :: condition_variable定期的に待機するのstd :: unique_lockの<はstd :: mutexを>使用しています。

書式#include <iostreamの> //はstd :: coutを
する#include <スレッド> //はstd ::スレッド
の#include <ミューテックス> //はstd ::ミューテックス、STD :: unique_lockの
書式#include <condition_variable> //はstd :: condition_variable 

STD ::ミューテックスMTX ;. //グローバルミューテックス
のstd :: condition_variable CV ;. //グローバル変数の条件が
偽=準備BOOL; //グローバルフラグ

空隙do_print_id(int型のID)
{ 
    STDのunique_lockのは:: <STDである::ミューテックス> LCK(MTX); 
    (!READY)しばらく//フラグが真でない場合、待って... 
        cv.wait(LCK); //現在のスレッドは、グローバルフラグがtrueになったときに、ブロックされ、
    / /スレッドがウェイクアップし、印刷は、スレッド番号IDダウン続ける。
    STD :: COUT << "スレッド" ID << << '\ N-'; 
} 

ボイドゴー()
{ 
    STDのunique_lockのは:: <ありstd ::ミューテックス> LCK(MTX);
    =真の準備ができて。//设置全局标志位为真。
    cv.notify_all(); //唤醒所有线程。
} 

int型のmain()
{ 
    STD ::スレッドのスレッド[10]。
    10個のスレッドを生成//:
    のために(; iは10 <; I = 0 int型++ I)
        スレッド[I] = STD ::スレッド(do_print_id、I)。

    std :: coutの<< "参戦する準備ができて10件のスレッド... \ nを"; 
    行きます(); //行きます!

  (オート&番目:スレッド)のための
        th.join(); 

    0を返します。
}

  

おすすめ

転載: www.cnblogs.com/immortalBlog/p/11680321.html