マルチスレッドデータアクセス時間保護のC ++ 11例

1つの#include <iostreamの>
 2の#include <スレッド>
 3。の#include < ストリング >
 4。の#include <ベクトル>
 5。の#include <一覧>
 6。の#include <ミューテックス>
 7。  
8。 使用した 名前空間STD;
 9   
10  // メンバ関数として書き込みスレッドスレッド関数の方法
 。11  // STDが共有オブジェクトである:: COUT(出力ストリーム)、それは複数のスレッドからの同時アクセスを保証すべきである; 
図12は、ある クラス13である{
 14 公共15 // スレッド1:受信ユーザ・メッセージ・キューに入れ16 空隙inMsgRecvQueue() 
 。17     {
 18であります       
               int型私は、
19          一方、1 20          {
 21              CIN >> I。
22              my_mutex。ロック();
23              COUT << " inMsgRecvQueue()执行、插入一个元素" << I << ENDL。
24              msgRecvQueue.push_back(I)。 
25              my_mutex.unlock()。
26          }
 27      }
 28      ブールnoempty_or_not()
 29      {
 30          であれば(!msgRecvQueue.empty())
 31         {
 32              リターン trueに33である         }
 34が         戻り falseに;
 35      }
 36      空隙delete_first()
 37      {
 38である         
39          msgRecvQueue.pop_front();
 40          
41である     }
 42である     
43である     // スレッド2:キューの最初の要素を削除します。
44は     空隙outMsgRecvQueue()
 45      {
 46が         しばらく1 47          {
 48              BOOLの結果= noempty_or_not();
 49   
50             IF(結果== trueに51である              。{my_mutex ロック();
 52は                  COUT << " outMsgRecvQueue()の実行、内部キューから取り出さ要素:" << msgRecvQueue.front()<< ; ENDL
 53れる                 delete_first();    
 54れます                 my_mutex.unlock();
 55              }
 56は、             他の
57である             {                
 58                  // COUT << "現在のメッセージ・キューが空である!" << ENDL; 
59              }
 60          }
 61は          COUT << " 終了!"<< てendl;
62      }
 63   
64  プライベート65      のstd ::リスト< 整数 > msgRecvQueue。
66      のstd ::ミューテックスmy_mutex。
67  }。
68   
69  のint main()の
 70  {
 71      myobja。
72   
73      のstd :: myOutMsgObj(&A :: outMsgRecvQueue、&スレッドmyobja)を、
74      のstd :: myInMsgObj(&A :: inMsgRecvQueue、&スレッドmyobja)を、
75      裁判所未満<< " 主线程执行!" << てendl;
76      myOutMsgObj.join()。
77      COUT << " 1実行のメインスレッド。!" << ENDL;
 78      
79   
80      COUT << " !実行のメインスレッド" << ENDL;
 81      myInMsgObj.join();
 82      リターン 0 ;
 83 }

 

おすすめ

転載: www.cnblogs.com/liuzhenbo/p/11298665.html