C のスレッド終了とキャンセルのメカニズムには次のものがあります。 スレッド終了: std::thread::join() はターゲット スレッドが実行を完了するまで現在のスレッドをブロックします。 std::thread::detach() はターゲット スレッドをスレッドから切り離します。管理。スレッドのキャンセル: std::thread::request_termination() はターゲット スレッドに実行の終了を要求します。 std::thread::get_id() はターゲット スレッド ID を取得し、std::terminate() とともに使用してターゲットを即座に終了できます。糸。実際には、request_termination() によってスレッドが終了のタイミングを決定できるようになり、join() によってメインスレッドが終了する前にワーカースレッドが実行を完了することが保証されます。スレッドのキャンセルは常に尊重されるわけではなく、スレッドを終了すると未定義の動作が発生する可能性があることに注意してください。
#C 並行プログラミング: スレッドの終了とキャンセルを実行するにはどうすればよいですか?
マルチスレッド アプリケーションでは、特定のスレッドまたはそのタスクが必要なくなったときに、スレッドの終了とキャンセルが重要な操作になります。 C には、スレッドの終了とキャンセルを実装するための複数のメカニズムが用意されています。ターゲット スレッドが実行を完了するまで、現在のスレッドが継続されます。
std::thread::detach(): ターゲット スレッドをスレッド管理から切り離します。スレッドは実行を続けますが、
std::thread
#スレッドのキャンセル
##std::thread::request_termination(): ターゲット スレッドに実行の終了を要求します。スレッドは、このリクエストを受け入れるかどうかを決定できます。
: ターゲット スレッドの ID を取得します。これは std::terminate() 関数に渡すことができます。これにより、ターゲット スレッドが即座に終了します。
実践的なケース
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:cpp;toolbar:false;'>#include <iostream>
#include <thread>
void work_thread() {
while (true) {
// 无限循环
}
}
int main() {
std::thread worker(work_thread);
std::cout << "按回车键终止工作线程:" << std::endl;
std::cin.get();
worker.request_termination();
worker.join();
return 0;
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
Points
request_termination() ワーカー スレッドがいつそれ自体を終了するかを決定できるようにします。
join()メインスレッドが終了する前にワーカースレッドが実行を完了するようにします。
スレッドを終了すると未定義の動作が発生する可能性があるため、注意して使用してください。
以上がC++ 同時プログラミング: スレッドの終了とキャンセルを行うには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。