ホームページ >バックエンド開発 >C++ >C++ 同時プログラミング: スレッドの終了とキャンセルを行うには?

C++ 同時プログラミング: スレッドの終了とキャンセルを行うには?

WBOY
WBOYオリジナル
2024-05-06 14:12:01904ブラウズ

C のスレッド終了とキャンセルのメカニズムには次のものがあります。 スレッド終了: std::thread::join() はターゲット スレッドが実行を完了するまで現在のスレッドをブロックします。 std::thread::detach() はターゲット スレッドをスレッドから切り離します。管理。スレッドのキャンセル: std::thread::request_termination() はターゲット スレッドに実行の終了を要求します。 std::thread::get_id() はターゲット スレッド ID を取得し、std::terminate() とともに使用してターゲットを即座に終了できます。糸。実際には、request_termination() によってスレッドが終了のタイミングを決定できるようになり、join() によってメインスレッドが終了する前にワーカースレッドが実行を完了することが保証されます。スレッドのキャンセルは常に尊重されるわけではなく、スレッドを終了すると未定義の動作が発生する可能性があることに注意してください。

C++ 同時プログラミング: スレッドの終了とキャンセルを行うには?

#C 並行プログラミング: スレッドの終了とキャンセルを実行するにはどうすればよいですか?

マルチスレッド アプリケーションでは、特定のスレッドまたはそのタスクが必要なくなったときに、スレッドの終了とキャンセルが重要な操作になります。 C には、スレッドの終了とキャンセルを実装するための複数のメカニズムが用意されています。ターゲット スレッドが実行を完了するまで、現在のスレッドが継続されます。

std::thread::detach(): ターゲット スレッドをスレッド管理から切り離します。スレッドは実行を続けますが、

std::thread
    オブジェクトを通じてアクセスできなくなります。
  • #スレッドのキャンセル
  • ##std::thread::request_termination(): ターゲット スレッドに実行の終了を要求します。スレッドは、このリクエストを受け入れるかどうかを決定できます。
std::thread::get_id()

: ターゲット スレッドの ID を取得します。これは std::terminate() 関数に渡すことができます。これにより、ターゲット スレッドが即座に終了します。

  • 実践的なケース
  • メイン スレッドとワーカー スレッドという 2 つのスレッドが作成される例を考えてみましょう。メインスレッドがユーザー入力を待機している間、ワーカー スレッドは無限ループを実行し、ワーカー スレッドを終了します。 <pre class='brush:cpp;toolbar:false;'>#include &lt;iostream&gt; #include &lt;thread&gt; void work_thread() { while (true) { // 无限循环 } } int main() { std::thread worker(work_thread); std::cout &lt;&lt; &quot;按回车键终止工作线程:&quot; &lt;&lt; std::endl; std::cin.get(); worker.request_termination(); worker.join(); return 0; }</pre>Points

request_termination() ワーカー スレッドがいつそれ自体を終了するかを決定できるようにします。

join()

メインスレッドが終了する前にワーカースレッドが実行を完了するようにします。

    注意事項
  • スレッドのキャンセルは、特にスレッドがクリティカル セクションやその他の中断できない操作を実行する場合には、常に尊重されるわけではありません。
  • スレッドを終了すると未定義の動作が発生する可能性があるため、注意して使用してください。

以上がC++ 同時プログラミング: スレッドの終了とキャンセルを行うには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。