マルチスレッドにより、アプリケーションのパフォーマンスが大幅に向上します。 C では、 std::thread は同時スレッドを作成および管理する便利な方法を提供します。 std::thread::join() は、メインスレッドがスレッドが完了するまで待機することを保証しますが、std::thread::detach() の目的は不明瞭なままです。
デタッチされていません:
detach() がないと、メインスレッドは、作成されたスレッドが終了するまで待機してから、実行を続行します。このアプローチでは、メイン スレッドが終了する前に、必要なクリーンアップがすべて実行されることが保証されます。
デタッチ:
detach() を呼び出すと、メイン スレッドが終了する必要がなくなったことがシステムに通知されます。スレッドが作成されるまで待ちます。切り離されたスレッドは独自のクリーンアップを担当し、すべてのリソースが解放されると終了します。
std::thread のデストラクターでは、std::terminate が次のようになります。次の場合に呼び出されます:
したがって、デストラクターが呼び出される前にスレッドを結合またはデタッチすることが重要です。これを行わないと、プログラムが終了する可能性があります。
プログラムが終了すると、デタッチされたスレッドは待機されません。それらの実行は一時停止され、スレッドローカル オブジェクトは破棄されません。重要なことに、これはスタックが巻き戻されず、デストラクターの実行が妨げられることを意味します。これにより、データの破損、ファイル処理の問題、その他の予期しない動作が発生する可能性があります。
結合を使用します:
デタッチを使用します。
以上が`std::thread::join()` または `std::thread::detach()` を使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。