Namespaces
Variants

std::atomic_flag:: wait

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
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 Warteoperationen aus. Verhält sich so, als würden wiederholt die folgenden Schritte ausgeführt:

  • Vergleiche this - > test ( order ) mit dem von old .
    • Wenn diese gleich sind, blockiert bis * this durch notify_one() oder notify_all() benachrichtigt wird, oder der Thread spurios entblockt wird.
    • Andernfalls, kehrt zurück.

Diese Funktionen garantieren, dass sie nur zurückkehren, wenn sich der Wert geändert hat, selbst wenn die zugrundeliegende Implementierung fälschlicherweise entblockt.

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.

Inhaltsverzeichnis

Parameter

old - der Wert, auf den das atomic_flag -Objekt nicht mehr enthalten soll
order - die durchzusetzenden Speicherreihenfolge-Beschränkungen

Hinweise

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

Aufgrund des ABA-Problems können vorübergehende Änderungen von old zu einem anderen Wert und zurück zu old übersehen werden und nicht freigegeben werden.


Beispiel

Siehe auch

(C++20)
benachrichtigt mindestens einen auf das atomare Objekt wartenden Thread
(öffentliche Elementfunktion)
(C++20)
benachrichtigt alle auf das atomare Objekt wartenden Threads
(öffentliche Elementfunktion)
benachrichtigt einen in atomic_flag_wait blockierten Thread
(Funktion)
benachrichtigt alle in atomic_flag_wait blockierten Threads
(Funktion)