std::stop_callback<Callback>::~stop_callback
| ~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.