Namespaces
Variants

std:: atomic_wait, std:: atomic_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
atomic_wait atomic_wait_explicit
(C++20) (C++20)
Free functions for atomic flags
Definiert in Header <atomic>
template < class T >

void atomic_wait ( const std:: atomic < T > * object,

typename std:: atomic < T > :: value_type old ) ;
(1) (seit C++20)
template < class T >

void atomic_wait ( const volatile std:: atomic < T > * object,

typename std:: atomic < T > :: value_type old ) ;
(2) (seit C++20)
template < class T >

void atomic_wait_explicit ( const std:: atomic < T > * object,
typename std:: atomic < T > :: value_type old,

std:: memory_order order ) ;
(3) (seit C++20)
template < class T >

void atomic_wait_explicit ( const volatile std:: atomic < T > * object,
typename std:: atomic < T > :: value_type old,

std:: memory_order order ) ;
(4) (seit C++20)

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

  • Vergleiche die Wertdarstellung von object - > load ( ) (für Überladungen (1,2) ) oder object - > load ( order ) (für Überladungen (3,4) ) mit der von old .
    • Wenn diese bitweise gleich sind, blockiert bis * object durch std::atomic::notify_one() oder std::atomic::notify_all() benachrichtigt wird, oder der Thread spurious entblockt wird.
    • Andernfalls, kehrt zurück.

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

1,2) Entspricht object - > wait ( old ) .
3,4) Entspricht object - > wait ( old, order ) .
Wenn order einer der Werte std :: memory_order :: release und std :: memory_order :: acq_rel ist, ist das Verhalten undefiniert.

Inhaltsverzeichnis

Parameter

object - Zeiger auf das atomare Objekt, das geprüft und auf das gewartet werden soll
old - der Wert, der prüft, ob das atomare Objekt diesen nicht mehr enthält
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.

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

(C++20)
blockiert den Thread, bis eine Benachrichtigung erfolgt und der atomare Wert sich ändert
(öffentliche Elementfunktion von std::atomic<T> )
(C++20)
benachrichtigt mindestens einen auf das atomare Objekt wartenden Thread
(öffentliche Elementfunktion von std::atomic<T> )
(C++20)
benachrichtigt alle auf das atomare Objekt wartenden Threads
(öffentliche Elementfunktion von std::atomic<T> )
benachrichtigt einen in atomic_wait blockierten Thread
(Funktionstemplate)
benachrichtigt alle in atomic_wait blockierten Threads
(Funktionstemplate)