Namensräume
Varianten
Aktionen

std::atomic_flag::wait

Von cppreference.com
< cpp‎ | atomic‎ | atomic flag
 
 
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
 
 
void wait( bool old, std::memory_order order =
                         std::memory_order_seq_cst ) const noexcept;
(1) (seit C++20)
(constexpr seit C++26)
void wait( bool old,

           std::memory_order order =

               std::memory_order_seq_cst ) const volatile noexcept;
(2) (seit C++20)

Führt atomare Wartevorgänge durch. Verhält sich so, als würde es wiederholt die folgenden Schritte ausführen:

  • Vergleiche this->test(order) mit old.
    • Wenn diese gleich sind, blockiert die Ausführung, bis *this durch notify_one() oder notify_all() benachrichtigt wird oder der Thread aus anderen Gründen (spurious wakeup) aufgeweckt wird.
    • Andernfalls wird zurückgekehrt.

Diese Funktionen geben garantiert nur zurück, wenn sich der Wert geändert hat, auch wenn die zugrunde liegende Implementierung fälschlicherweise entblockiert.

Wenn order nicht std::memory_order_relaxed, std::memory_order_consume, std::memory_order_acquire oder std::memory_order_seq_cst ist, ist das Verhalten undefiniert.

Inhalt

[bearbeiten] Parameter

old - der Wert, der nicht mehr im `atomic_flag`-Objekt enthalten ist, zum Überprüfen
Reihenfolge - Speicherreihenfolgebeschränkungen, die durchgesetzt werden sollen

[bearbeiten] Hinweise

Diese Form der Änderungsdetektion ist oft effizienter als einfaches Polling oder reine Spinlocks.

Aufgrund des ABA-Problems können transiente Änderungen von old zu einem anderen Wert und zurück zu old möglicherweise übersehen werden und nicht zu einer Entsperrung führen.


[bearbeiten] Beispiel

[bearbeiten] Siehe auch

benachrichtigt mindestens einen Thread, der auf das atomare Objekt wartet
(public member function) [edit]
benachrichtigt alle Threads, die auf das atomare Objekt warten
(public member function) [edit]
benachrichtigt einen Thread, der in atomic_flag_wait blockiert ist
(Funktion) [bearbeiten]
benachrichtigt alle Threads, die in atomic_flag_wait blockiert sind
(Funktion) [bearbeiten]