アプリケーションのパフォーマンスを向上させるために std::thread を利用する場合は、次のことを理解することが重要ですdetach() を呼び出すかどうかの区別。
detach() を呼び出さずに、作成されたスレッドは独自の実行パス内で独立して動作します。このシナリオでは:
void Someclass::Somefunction() { //... std::thread t([ ] { printf("thread called without detach"); }); //some code here }
メインスレッドは「ここで何らかのコード」を実行し、新しく作成されたスレッドは「デタッチせずに呼び出されたスレッド」を出力します。
detach() を呼び出すと、スレッドがメイン スレッドと対話する方法が変更されます。
void Someclass::Somefunction() { //... std::thread t([ ] { printf("thread called with detach"); }); t.detach(); //some code here }
さて、メインスレッドは、スレッドが起動された直後に「ここにあるコード」を実行します。重要なのは、detach() はスレッドの完了を待機しません。
上記の違いに基づいて、次のガイドラインを検討してください。
次の場合にのみ detach() を使用してください。
注意:
切り離されたスレッドが残ったままプログラムが終了する (つまり、メインが戻る) ことに注意することが重要です。実行中、スタックは巻き戻されず、デストラクターが実行されないままになる可能性があります。これにより、データの破損やその他の望ましくない結果が生じる可能性があります。
以上がデタッチするかしないか: `std::thread::detach()` をいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。