コンストラクタ
C ++ 11のスレッド:: STDを提供し、std::
thread
thread_object(callable),
呼び出し可能にすることができ
1.関数ポインタ
2.関数オブジェクト
3.ラムダ式
スレッドの関連する呼び出し可能なオブジェクトまたは関数に引数を渡すためには、単にのstd ::スレッドのコンストラクタに追加の引数を渡します。
デフォルトでは、すべての引数は、新しいスレッドの内部ストレージにコピーされます。
書式#include <iostreamの> の#include <スレッド> 使用して 名前空間はstdを、 // ダミー関数 ボイドのfoo(int型X){ ため(int型 i = 0 ; iは、X <; iは++ ){ COUT << " 呼び出し可能な\ nとして関数ポインタを使用してスレッド" 。 } } // 呼び出し可能なオブジェクト クラスthread_obj { パブリック: ボイド 演算子()(INT X){ ため(int型のI =0 ; I <X; I ++ ) はcout << 「呼び出し可能\ nとして関数オブジェクトを使用してスレッド」。 } }。 INT メイン() { COUT << " 独立して動作するスレッド1と2と3 " << ENDL。 // このスレッドは、呼び出し可能なように、関数ポインタを使用して起動される スレッドTH1(FOO、3 )。 // このスレッドは、呼び出し可能なように、関数オブジェクトを使用することによって起動される スレッドTH2(thread_obj()、3 )。 // ラムダ式の定義 = [](オートFをint型X){ ため(int型 i = 0 ; I <X、iは++ ) COUT << " 呼び出し可能な\ nとしてラムダ式を使用してスレッド" 。 }。 // このスレッドは、呼び出し可能なようにラムダ式を使用することによって起動される スレッドTH3(F、3 )。 // スレッドが終了するのを待ち // 終了するスレッドT1待ち (th1.join)。 // 終了するスレッドT2を待ち )(th2.join。 // 終了するスレッドT3のを待ちます )(th3.join。 リターン 0; }
スレッド::参加します()
スレッドが開始されると、この新しいスレッドが終了するのを、別のスレッドが待つことができます。このため、別のは、STD ::スレッドオブジェクトに()関数に参加呼び出す必要があります必要があります。
例:
メインスレッドが10個のワーカースレッドを起動し、それらが終了するのを、これらすべてのスレッドを開始した後、主な機能が待機する持っていると仮定します。主な機能は継続するすべてのスレッドに参加した後。
参照
https://www.geeksforgeeks.org/multithreading-in-cpp/
https://thispointer.com//c-11-multithreading-part-1-three-different-ways-to-create-threads/
https://thispointer.com/c11-multithreading-part-2-joining-and-detaching-threads/
https://thispointer.com/c11-multithreading-part-3-carefully-pass-arguments-to-threads/