Namespaces
Variants

std::atomic_ref<T>:: 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 ( value_type old, std:: memory_order order =
std:: memory_order_seq_cst ) const noexcept ;
(constexpr seit C++26)

Führt atomare Warteoperationen aus. Verhält sich so, als würden wiederholt die folgenden Schritte ausgeführt:

  • Vergleiche die Wertdarstellung von this - > load ( order ) mit der 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, der überprüft werden soll, ob das Objekt des atomic_ref diesen nicht mehr enthält
order - Speicherreihenfolge-Beschränkungen, die durchgesetzt werden sollen

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.

Der Vergleich erfolgt bitweise (ähnlich wie std::memcmp ); es wird kein Vergleichsoperator verwendet. Padding-Bits, die nie an der Wertdarstellung eines Objekts teilnehmen, werden ignoriert.

Beispiel

Siehe auch

benachrichtigt mindestens einen auf das atomare Objekt wartenden Thread
(öffentliche Elementfunktion)
benachrichtigt alle auf das atomare Objekt wartenden Threads
(öffentliche Elementfunktion)
benachrichtigt einen in atomic_wait blockierten Thread
(Funktionstemplate)
benachrichtigt alle in atomic_wait blockierten Threads
(Funktionstemplate)