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 depuis C++26)

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

  • Comparez la représentation de valeur de this - > load ( order ) avec celle de old .
    • Si elles sont égales, se bloque jusqu'à ce que * this soit notifié par notify_one() ou 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.

Si order n'est pas std:: memory_order_relaxed , std:: memory_order_consume , std:: memory_order_acquire ou std:: memory_order_seq_cst , le comportement est indéfini.

Table des matières

Paramètres

old - la valeur à vérifier que l'objet du atomic_ref ne contient plus
order - les contraintes d'ordre mémoire à appliquer

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

notifie au moins un thread en attente sur l'objet atomique
(fonction membre publique)
notifie tous les threads bloqués en attente sur l'objet atomique
(fonction membre publique)
notifie un thread bloqué dans atomic_wait
(fonction template)
notifie tous les threads bloqués dans atomic_wait
(fonction template)