混同を避けるために、スレッドが表す
std::thread
そのオブジェクトのインスタンスを使用して、スレッドことを示し、そのオペレーティングシステムの概念下糸
第2章thread
管理
2.1 thread
作成(コンストラクタ)
。デフォルトのコンストラクタ
default: thread() noexcept;
プレースホルダを作成し、任意のスレッドに関連付けられていません。以下のように定義シーン使うthread
配列を。それを通過した後にできthread& operator=( thread&& other ) noexcept
たスレッドに関連付けられた値を割り当てることと
B。移動コンストラクタ
thread (thread&& other) noexcept;
C。初期のコンストラクタ
template<class Function, class...Args>
explicit thread(Function&& f, Args&&...args);
一般的なコンストラクタ、オブジェクトを作成するときに機能し、そのパラメータを渡し、したがって関連するスレッド
D。 コピーコンストラクタ
thread(const thread&) = delete;
thread
オブジェクトはコピーすることはできません
2.2 join
:スレッドが実行を完了するのを待ちます
join
また、すべてのメモリとスレッドの関連をクリーンアップします。join
帰国後は、thread
もはや任意のスレッドに関連付けられている、joinable()
それが返されませんfalse
。各スレッドは一度だけ呼び出すことができますjoin
プログラムで例外を作ることがありjoin
、これを避けるために、通話の終了前に、我々はする必要がありますcatch
も呼び出しjoin
。しかし、あまりにも複雑なキャッチを試みると範囲を煩雑にします。全ての出口パスがであることを確認することがあればjoin
、需要、RAII機構、パッケージthread_guardクラスの処理デストラクタを使用することができます
2.3 detach
:バックグラウンドスレッド
するthread
呼び出しオブジェクトないdetach
がバックグラウンドで実行されているに関連付けられ、そして通信することができる任意の手段を切断し、もはやによって糸ますthread
参照、オブジェクト、したがってことができませんjoin
デタッチスレッドもデーモンスレッドと呼ばれています
thread
オブジェクトができるかどうかdetach
、それができるかどうかjoin
それを満たすために必要な条件:スレッドと関連することが、反射をjoinable()
返す必要がありますtrue
2.4 thread
パラメータの受け渡し
構造thread
それが呼び出し可能渡された直後に必要なパラメータを渡したときにオブジェクト
パラメータは、一時的な変数として、呼び出し可能に右の値として、内部ストレージにアクセスし、するために作成することができ、新しいスレッドにコピーされます
暗黙の変換パラメータ経過した場合、結果は期待できないかもしれません。引数についてはstring const&
、それが渡されchar buff[LEN]
、それをするように見えるものの、時間buf
暗黙の移行もstring const
、その後、呼び出し可能に渡されたが、実際のパラメータが対処されていないこと、であるとしてアップロードされ、最初にここ(パラメータに渡されましたbuf
(ポインタ/配列名))、次いで場合、内部メモリにコピーされたthread
オブジェクトはdetach
、buf
記憶空間の点を洗浄する、この時点であろう十分な時間パラメータ呼び出し可能な構築ので未定義の動作ではないかもしれません
あなたが必要な参照を渡したい場合は型コンストラクタのパラメータ値は、右側に許容可能であるため、直接転送非const参照はその後、エラーをコンパイルしますstd::ref
引数はコピーできない場合は、転送制御パラメータが転送されます後にのみ、移動すること
2.5 thread
所有権の移転
thread
移動可能なオブジェクトの例には、移動するように構成されてもよいです
あなたはすでにスレッドに関連付けられているに移動することはできませんthread
2.6 std::thread::hardware_concurrency()
:おそらく通常CPUコアの数が、唯一のヒント値、ゼロ
2.7識別スレッド
スレッド識別子タイプ:std::thread::id
比較することができ、ハッシュ可能、その値には意味論的意味(無意味な)ではありません
呼び出しthread
オブジェクトのインスタンスget_id()
IDを取得する方法を。ID・リターンのデフォルトの設定に関連付けられたスレッドは、任意のスレッドを表していないいない場合
現在のスレッドのIDができるstd::this_thread::get_id()
IDを取得します