Namespaces
Variants

std::stop_callback<Callback>:: ~stop_callback

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
~stop_callback ( ) ;
(seit C++20)

Zerstört das stop_callback Objekt.

Wenn * this einen stop_token mit assoziiertem Stop-Zustand besitzt, wird der Callback davon abgemeldet.

Wenn die Callback-Funktion gleichzeitig in einem anderen Thread aufgerufen wird, schließt der Destruktor erst ab, nachdem der Aufruf der Callback-Funktion abgeschlossen ist. Wenn die Callback-Funktion im selben Thread aufgerufen wird, in dem der Destruktor aufgerufen wird, kehrt der Destruktor zurück, ohne auf den Abschluss des Callback-Aufrufs zu warten (siehe Hinweise).

Hinweise

Der stop_callback -Destruktor ist darauf ausgelegt, Race Conditions und Deadlocks zu verhindern. Wenn ein anderer Thread gerade den Callback aufruft, kann der Destruktor erst zurückkehren, nachdem dieser abgeschlossen ist, da sonst das Funktionsobjekt möglicherweise zerstört wird, während es ausgeführt wird. Der Callback muss weder kopierbar noch verschiebbar sein – er verbleibt im stop_callback -Objekt selbst, auch nach der Registrierung.

Andererseits, wenn der aktuelle Thread, der den Destruktor aufruft, derselbe Thread ist, der den Callback aufruft, dann kann der Destruktor nicht warten, da sonst ein Deadlock auftreten würde. Es ist möglich und gültig, dass derselbe Thread den stop_callback zerstört, während er seine Callback-Funktion aufruft, weil die Callback-Funktion selbst den stop_callback direkt oder indirekt zerstören könnte.