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 }