Namensräume
Varianten
Aktionen

std::stop_callback<Callback>::~stop_callback

Von cppreference.com
 
 
Bibliothek für nebenläufige Programmierung
Threads
(C++11)
(C++20)
this_thread Namespace
(C++11)
(C++11)
(C++11)
Kooperatives Beenden
Gegenseitiger Ausschluss
(C++11)
Allgemeines Sperrungsmanagement
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Bedingungsvariablen
(C++11)
Semaphoren
Latches und Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
(C++11)
Sichere Wiederherstellung
(C++26)
Hazard Pointer
Atomare Typen
(C++11)
(C++20)
Initialisierung von atomaren Typen
(C++11)(veraltet in C++20)
(C++11)(veraltet in C++20)
Speicherordnung
(C++11)(deprecated in C++26)
Freie Funktionen für atomare Operationen
Freie Funktionen für atomare Flags
 
std::stop_callback
Memberfunktionen
stop_callback::~stop_callback
Deduction Guides
 
~stop_callback();
(seit C++20)

Zerstört das stop_callback-Objekt.

Wenn *this ein stop_token mit einem zugehörigen Stop-Status hat, wird der Callback davon abgemeldet.

Wenn die Callback-Funktion auf einem anderen Thread gleichzeitig aufgerufen wird, wird der Destruktor erst abgeschlossen, wenn der Aufruf der Callback-Funktion abgeschlossen ist. Wenn die Callback-Funktion auf demselben Thread aufgerufen wird, auf dem der Destruktor aufgerufen wird, gibt der Destruktor zurück, ohne auf den Abschluss des Callback-Aufrufs zu warten (siehe Hinweise).

[bearbeiten] Hinweise

Der Destruktor von stop_callback ist darauf ausgelegt, Race Conditions und Deadlocks zu verhindern. Wenn ein anderer Thread gerade den Callback aufruft, kann der Destruktor nicht zurückgegeben werden, bis dieser abgeschlossen ist, andernfalls könnte das Funktions-Objekt potenziell zerstört werden, während es ausgeführt wird. Die Callback-Funktion muss weder kopierbar noch verschiebbar sein – sie lebt im stop_callback-Objekt selbst, auch nach der Registrierung.

Wenn jedoch der aktuelle Thread, der den Destruktor aufruft, derselbe Thread ist, der den Callback aufruft, 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 seinen Callback aufruft, da die Callback-Funktion selbst den stop_callback direkt oder indirekt zerstören könnte.