協調キャンセル
キャンセルを強制ではなく要求として伝え、停止の仕方はリスナー側が決めるモデル。
- 概念URI
https://comcomponent.com/knowledge/cooperative-cancellation/
- 最終確認日
- 2026-08-01
- 機械可読データ
- JSON-LD
この概念が関わる関係
- 停止イベント+WaitForMultipleObjectsは協調キャンセルの実装を担います。手動リセットの停止イベントを1つ作り、各ワーカーが仕事の合図と停止の合図を同時に待つことで、ブロッキング待機中のスレッドも停止要求で起こせる。 / 確度: 確立した関係 / 確認日: 2026-08-02 出典
- std::stop_tokenは協調キャンセルの実装を担います。止める側は要求を出すだけで、いつどう終わるかはスレッド自身が後片付きのよい所で決め、joinの完了をもって止まったとみなす。C++にはスレッドを外から安全に止める手段がないため、これが唯一の形になる。 / 確度: 確立した関係 / 確認日: 2026-08-02 出典
- CancellationTokenは協調キャンセルの実装を担います。CancellationTokenSourceとCancellationTokenによるモデルでは、キャンセルは強制ではなく協調であり、停止の仕方はリスナー側が決める。ライブラリは公開メソッドでCancellationTokenを受け取るべきとされている。 / 確度: 確立した関係 / 確認日: 2026-08-02 出典
- 協調キャンセルはThread.Abortの後継に当たります。スレッドの停止にはCancellationTokenを使うべきで、.NET Coreおよび.NET 5以降ではThread.AbortがPlatformNotSupportedExceptionを投げ、.NET 5以降はコンパイル時にも非推奨警告(SYSLIB0006)になる。協調キャンセルに応じないサードパーティコードは別プロセスで実行してProcess.Killで止める。 / 確度: 確立した関係 / 確認日: 2026-08-02 出典
- 割り込み(interruption)は協調キャンセルの実装を担います。interrupt()は対象スレッドの割り込みステータスを立て、sleep・wait・joinなどでブロックしていればInterruptedExceptionを投げて即座に起こす(このときステータスはクリアされる)。InterruptedExceptionをcatchして何もしないコードを書かず、終了できないならステータスを復元して呼び出し元へ合図を伝える。 / 確度: 確立した関係 / 確認日: 2026-08-02 出典
この概念を扱う記事
一次資料
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。