Namespaces
Variants

std:: atomic_flag_wait, std:: atomic_flag_wait_explicit

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
atomic_flag_wait atomic_flag_wait_explicit
(C++20) (C++20)
Definiert in Header <atomic>
void atomic_flag_wait ( const atomic_flag * object, bool old ) noexcept ;
(1) (seit C++20)
void atomic_flag_wait ( const volatile atomic_flag * object,
bool old ) noexcept ;
(2) (seit C++20)
void atomic_flag_wait_explicit ( const atomic_flag * object,
bool old, std:: memory_order order ) noexcept ;
(3) (seit C++20)
void atomic_flag_wait_explicit ( const volatile atomic_flag * object,
bool old, std:: memory_order order ) noexcept ;
(4) (seit C++20)

Führt atomare Warteoperationen aus.

Vergleicht object - > test ( std:: memory_order_seq_cst ) oder object - > test ( order ) mit old , und wenn sie gleich sind, blockiert es bis * object durch std::atomic_flag::notify_one() oder std::atomic_flag::notify_all() benachrichtigt wird (oder der Thread spurios entblockt wird). Dies wird wiederholt, bis die Werte ungleich verglichen werden.

1,2) Die Speichersynchronisierungsreihenfolge ist std:: memory_order_seq_cst .
3,4) Die Speichersynchronisierungsreihenfolge ist order .
Wenn order einer der Werte std:: memory_order_release oder std:: memory_order_acq_rel ist, ist das Verhalten undefiniert.

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

Inhaltsverzeichnis

Parameter

object - Zeiger auf das atomare Flag, das geprüft und auf das gewartet werden soll
old - der Wert, auf dessen Abwesenheit im atomaren Flag geprüft wird
order - die Speichersynchronisierungsreihenfolge

Rückgabewert

(keine)

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 von std::atomic_flag )
(C++20)
benachrichtigt alle auf das atomare Objekt blockiert wartenden Threads
(öffentliche Elementfunktion von std::atomic_flag )
benachrichtigt einen in atomic_flag_wait blockierten Thread
(Funktion)
benachrichtigt alle in atomic_flag_wait blockierten Threads
(Funktion)