C ++同時実行アクションの研究ノートで

混同を避けるために、スレッドが表す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オブジェクトはdetachbuf記憶空間の点を洗浄する、この時点であろう十分な時間パラメータ呼び出し可能な構築ので未定義の動作ではないかもしれません

あなたが必要な参照を渡したい場合は型コンストラクタのパラメータ値は、右側に許容可能であるため、直接転送非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を取得します

おすすめ

転載: www.cnblogs.com/jerrywossion/p/11324562.html