名前空間
変種
操作

std::stop_callback<Callback>::~stop_callback

From cppreference.com
 
 
並行性サポートライブラリ
スレッド
(C++11)
(C++20)
this_thread 名前空間
(C++11)
(C++11)
(C++11)
協調的なキャンセル
排他制御
(C++11)
汎用ロック管理
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
条件変数
(C++11)
セマフォ
ラッチとバリア
(C++20)
(C++20)
future
(C++11)
(C++11)
(C++11)
(C++11)
安全なメモリ解放 (Safe Reclamation)
(C++26)
ハザードポインタ
アトミック型
(C++11)
(C++20)
アトミック型の初期化
(C++11)(C++20で非推奨)
(C++11)(C++20で非推奨)
メモリオーダー
(C++11)(C++26で非推奨)
アトミック操作のためのフリー関数
アトミックフラグのためのフリー関数
 
std::stop_callback
メンバ関数
stop_callback::~stop_callback
推論補助
 
~stop_callback();
(C++20以降)

stop_callback オブジェクトを破棄します。

*this が、関連付けられた停止状態を持つ stop_token を持つ場合、コールバックをそこから登録解除します。

コールバック関数が別のスレッドで並行して呼び出されている場合、デストラクタはコールバック関数の呼び出しが完了するまで終了しません。コールバック関数がデストラクタが呼び出されているのと同じスレッドで呼び出されている場合、デストラクタはコールバックの呼び出しが完了するのを待たずに返ります(注を参照)。

[編集]

stop_callback のデストラクタは、競合状態とデッドロックを防ぐように設計されています。別のスレッドが現在コールバックを呼び出している場合、デストラクタはそれが完了するまで返ることができません。そうしないと、関数オブジェクトが実行中に破棄される可能性があります。コールバック関数は、コピー可能または移動可能である必要はありません。登録後も、stop_callback オブジェクト自体内に存在します。

一方、デストラクタを呼び出している現在のスレッドがコールバックを呼び出しているスレッドと同じ場合、デストラクタは待つことができません。待つとデッドロックが発生するためです。同じスレッドが、コールバック関数を呼び出している間に stop_callback を破棄することは、可能であり有効です。これは、コールバック関数自体が直接的または間接的に stop_callback を破棄する可能性があるためです。

English 日本語 中文(简体) 中文(繁體)