名前空間
変種
操作

std::stop_callback<Callback>::~stop_callback

提供: cppreference.com
 
 
スレッドサポートライブラリ
スレッド
(C++11)
(C++20)
(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++11)
(C++11)
条件変数
(C++11)
セマフォ
ラッチとバリア
(C++20)
(C++20)
フューチャー
(C++11)
(C++11)
(C++11)
(C++11)
 
std::stop_callback
メンバ関数
stop_callback::~stop_callback
推定ガイド
 
~stop_callback();
(C++20以上)

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

*this が停止状態に紐付いた stop_token を持つ場合は、コールバックを登録解除します。

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

[編集] ノート

stop_callback のデストラクタは、競合状態やデッドロックを避けるように設計されています。 コールバックが別のスレッドで並行的に呼ばれている場合は、それが完了するまでデストラクタは戻ることができません (そうでなければ関数オブジェクトが実行中に破棄されかねません)。 コールバック関数はコピー可能である必要もムーブ可能である必要もなく、登録後も stop_callback オブジェクト自身の中に存在します。

一方、デストラクタを呼んでいる現在のスレッドがコールバックが呼ばれているのと同じスレッドである場合は、デストラクタは待つことができません (そうでなければデッドロックが発生します)。 コールバック関数自身が直接または間接的に stop_callback を削除するかもしれないため、 stop_callback を破棄するスレッドとコールバック関数が呼ばれるスレッドが同じであることは有り得ることであり、有効です。