C ++マルチスレッドベースの研究ノート(6)

condition_variable、待って、notifiy_one、使用のnotify_all

condition_variable:変数条件

待つ:起こされるのを待っています

notify_one:スレッドランダムウェイクアップ

notify_all:ウェイクアップすべてのスレッド

次のコードは、順番デジタル印刷における3つのスレッドです

1の#include <iostreamの>
 2の#include <スレッド>
 3の#include <ミューテックス>
 4  使って 名前空間STDを、
5つの 
6  クラスプリント
 7  {
 8  プライベート9      ミューテックスmymutex。   // 互斥锁
10      condition_variable my_cond。  // 条件变量
11      のint NUM;
12      のint フラグ。
13      int型の数。
14  公衆15      プリント(){
 16          NUM = 1 17          フラグ= 1 18          カウント= 0 ;
19      }
 20      空隙PRINT1を(){
 21          ながら(<カウント8 {)
 22              unique_lockの<ミューテックス> myunique(mymutex)を、
23              であれば(フラグ=!1 ){
 24                  my_cond.wait(myunique)。   // 等待被notify_one或者notify_all唤醒
25              }
 26              {
 27                  フラグ= 2 28の                  coutの<<" Thread_1:" << NUM ++ << ENDL;
 29                  COUNT ++ ;
 30                  my_cond.notify_all();    // すべてのスレッドがロックされている目を覚ます
31である             }
 32          }
 33である     }
 34である     ボイドPRINT2(){
 35          ながら(COUNT < 8。){
 36              unique_lockのは<ミューテックス>はmyunique(mymutex);
 37 [              IF(!フラグに= 2 ){
 38は                 my_cond.wait(myunique);
 39              }
 40              {
41                  裁判所未満<< " thread_2:" << NUM ++ << てendl;
42                  フラグ= 3 43                  数++ ;
44                  my_cond.notify_all()。
45              }
 46          }
 47      }
 48      空隙print3(){
 49          、一方は(<カウント8 {)
 50              unique_lockの<ミューテックス> myunique(mymutex)を、
51              であれば(フラグ!= 3 ){
 52                 my_cond.wait(myunique)。
53              }
 54              {
 55                  フラグ= 1 56                  裁判所未満<< " thread_3:" << NUM ++ << てendl;
57                  数++ ;
58                  my_cond.notify_all()。
59              }
 60          }
 61      }
 62  }。
63  のint main()の
 64  {
 65      プリントP。
66      スレッドthread_1(&プリント:: PRINT1、&P)。
67      スレッドthread_2(&プリント:: PRINT2、&P);
68      スレッドthread_3(&プリント:: print3、&P)。
69      thread_1.join()。
70      thread_2.join()。
71      thread_3.join()。
72      システム(一時停止)。
73      リターン 0 74 }

おすすめ

転載: www.cnblogs.com/main404/p/11258320.html