(参考: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を返します。 }