std::stop_callback<Callback>::~stop_callback
提供: cppreference.com
< cpp | thread | stop callback
~stop_callback(); |
(C++20以上) | |
stop_callback
オブジェクトを破棄します。
*this が停止状態に紐付いた stop_token
を持つ場合は、コールバックを登録解除します。
コールバック関数が別のスレッドで並行的に呼ばれている場合は、コールバック関数の呼び出しが完了するまでデストラクタは完了しません。 コールバック関数がデストラクタと同じスレッドで呼ばれている場合は、コールバック関数の完了を待たずにデストラクタが戻ります (ノートを参照してください)。
[編集] ノート
stop_callback
のデストラクタは、競合状態やデッドロックを避けるように設計されています。 コールバックが別のスレッドで並行的に呼ばれている場合は、それが完了するまでデストラクタは戻ることができません (そうでなければ関数オブジェクトが実行中に破棄されかねません)。 コールバック関数はコピー可能である必要もムーブ可能である必要もなく、登録後も stop_callback
オブジェクト自身の中に存在します。
一方、デストラクタを呼んでいる現在のスレッドがコールバックが呼ばれているのと同じスレッドである場合は、デストラクタは待つことができません (そうでなければデッドロックが発生します)。 コールバック関数自身が直接または間接的に stop_callback
を削除するかもしれないため、 stop_callback
を破棄するスレッドとコールバック関数が呼ばれるスレッドが同じであることは有り得ることであり、有効です。