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
Défini dans l'en-tête <atomic>
template < class T >

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

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

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

typename std:: atomic < T > :: value_type old ) ;
(2) (depuis 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) (depuis 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) (depuis C++20)

Effectue des opérations d'attente atomiques. Se comporte comme s'il effectuait de manière répétée les étapes suivantes :

  • Compare la représentation de valeur de object - > load ( ) (pour les surcharges (1,2) ) ou de object - > load ( order ) (pour les surcharges (3,4) ) avec celle de old .
    • Si elles sont égales bit à bit, alors se bloque jusqu'à ce que * object soit notifié par std::atomic::notify_one() ou std::atomic::notify_all() , ou que le thread soit débloqué de manière spurious.
    • Sinon, retourne immédiatement.

Ces fonctions garantissent de ne retourner que si la valeur a changé, même si l'implémentation sous-jacente se débloque de manière intempestive.

1,2) Équivalent à object - > wait ( old ) .
3,4) Équivalent à object - > wait ( old, order ) .
Si order est l'un des std :: memory_order :: release et std :: memory_order :: acq_rel , le comportement est indéfini.

Table des matières

Paramètres

object - pointeur vers l'objet atomique à vérifier et à attendre
old - la valeur à vérifier que l'objet atomique ne contient plus
order - l'ordre de synchronisation de la mémoire

Valeur de retour

(aucun)

Notes

Cette forme de détection de changement est souvent plus efficace qu'un simple sondage ou que des verrous d'attente active purs.

En raison du problème ABA , les changements transitoires de old vers une autre valeur et de retour à old pourraient ne pas être détectés, et ne pas débloquer.

La comparaison est effectuée bit à bit (similaire à std::memcmp ) ; aucun opérateur de comparaison n'est utilisé. Les bits de remplissage qui ne participent jamais à la représentation de la valeur d'un objet sont ignorés.

Exemple

Voir aussi

(C++20)
bloque le thread jusqu'à notification et changement de la valeur atomique
(fonction membre publique de std::atomic<T> )
(C++20)
notifie au moins un thread en attente sur l'objet atomique
(fonction membre publique de std::atomic<T> )
(C++20)
notifie tous les threads bloqués en attente sur l'objet atomique
(fonction membre publique de std::atomic<T> )
notifie un thread bloqué dans atomic_wait
(fonction template)
notifie tous les threads bloqués dans atomic_wait
(fonction template)