Namensräume
Varianten
Aktionen

std::stop_source::request_stop

Von cppreference.com
< cpp‎ | thread‎ | stop source
 
 
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
 
 
bool request_stop() noexcept;
(seit C++20)

Löst eine Stoppanforderung an den Stop-State aus, falls das stop_source-Objekt einen Stop-State hat und für diesen noch keine Stoppanforderung gestellt wurde.

Die Bestimmung erfolgt atomar. Wenn ein Stopp angefordert wurde, wird der Stop-State atomar aktualisiert, um Race Conditions zu vermeiden, so dass

  • stop_requested() und stop_possible() gleichzeitig auf anderen stop_tokens und stop_sources desselben Stop-States aufgerufen werden können;
  • request_stop() gleichzeitig auf anderen stop_source-Objekten aufgerufen werden kann, und nur eines tatsächlich die Stoppanforderung durchführt.

Siehe jedoch den Abschnitt Anmerkungen.

Inhalt

[edit] Parameter

(keine)

[edit] Rückgabewert

true, wenn das stop_source-Objekt einen Stop-State hat und dieser Aufruf eine Stoppanforderung gestellt hat, andernfalls false.

[edit] Nachbedingungen

stop_possible() ist false oder stop_requested() ist true.

[edit] Anmerkungen

Wenn request_stop() eine Stoppanforderung auslöst (d.h. true zurückgibt), dann werden alle für denselben zugehörigen Stop-State registrierten stop_callbacks synchron auf demselben Thread aufgerufen, auf dem request_stop() aufgerufen wird. Wenn ein Aufruf eines Callbacks durch eine Ausnahme beendet wird, wird std::terminate aufgerufen.

Wenn das stop_source-Objekt einen Stop-State hat, aber bereits eine Stoppanforderung gestellt wurde, gibt diese Funktion false zurück. Es gibt jedoch keine Garantie, dass ein anderes stop_source-Objekt, das gerade erfolgreich einen Stopp angefordert hat, nicht immer noch dabei ist, eine stop_callback-Funktion aufzurufen.

Wenn request_stop() eine Stoppanforderung auslöst (d.h. true zurückgibt), werden alle Bedingungsvariablen vom Basistyp std::condition_variable_any, die mit einem unterbrechbaren Wait für stop_tokens registriert wurden, die mit dem Stop-State des stop_sources assoziiert sind, benachrichtigt.

[edit] Beispiel