std::stop_callback<Callback>:: ~stop_callback
From ja.cppreference.net
<
cpp
|
thread
|
stop callback
C++
Concurrency support library
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
std::stop_callback
| Member functions | ||||
|
stop_callback::~stop_callback
|
||||
| Deduction guides |
|
~stop_callback
(
)
;
|
(C++20以降) | |
stop_callbackオブジェクトを破棄します。
*
this
が関連する停止状態を持つ
stop_token
を持つ場合、それからコールバックを登録解除します。
コールバック関数が別のスレッドで同時に実行されている場合、デストラクタはコールバック関数の実行が完了するまで終了しません。コールバック関数がデストラクタと同じスレッドで実行されている場合、デストラクタはコールバック関数の実行完了を待たずに制御を返します(注記を参照)。
注記
stop_callbackのデストラクタは、競合状態とデッドロックを防止するように設計されています。他のスレッドが現在コールバックを実行中の場合、その完了までデストラクタは戻ることができません。さもなければ、関数オブジェクトが実行中に破棄される可能性があります。コールバック関数はコピー可能でも移動可能でもある必要はなく、登録後もstop_callbackオブジェクト自体に存在します。
一方で、現在デストラクタを呼び出しているスレッドがコールバックを呼び出しているスレッドと同じである場合、デストラクタは待機できません。さもなければデッドロックが発生する可能性があります。同じスレッドがコールバック関数を呼び出しながらstop_callbackを破棄することは可能であり有効です。なぜなら、コールバック関数自体が直接的または間接的にstop_callbackを破棄する可能性があるためです。