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)
Défini dans l'en-tête <atomic>
void atomic_flag_wait ( const atomic_flag * object, bool old ) noexcept ;
(1) (depuis C++20)
void atomic_flag_wait ( const volatile atomic_flag * object,
bool old ) noexcept ;
(2) (depuis C++20)
void atomic_flag_wait_explicit ( const atomic_flag * object,
bool old, std:: memory_order order ) noexcept ;
(3) (depuis C++20)
void atomic_flag_wait_explicit ( const volatile atomic_flag * object,
bool old, std:: memory_order order ) noexcept ;
(4) (depuis C++20)

Effectue des opérations d'attente atomiques.

Compare object - > test ( std:: memory_order_seq_cst ) ou object - > test ( order ) avec old , et s'ils sont égaux, bloque jusqu'à ce que * object soit notifié par std::atomic_flag::notify_one() ou std::atomic_flag::notify_all() (ou que le thread soit débloqué de manière spurious). Ceci est répété jusqu'à ce que les valeurs comparées soient différentes.

1,2) L'ordre de synchronisation de la mémoire est std:: memory_order_seq_cst .
3,4) L'ordre de synchronisation de la mémoire est order .
Si order est l'un de std:: memory_order_release et std:: memory_order_acq_rel , le comportement est indéfini.

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.

Table des matières

Paramètres

object - pointeur vers le drapeau atomique à vérifier et attendre
old - la valeur à vérifier que le drapeau 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.

Exemple

Voir aussi

(C++20)
notifie au moins un thread en attente sur l'objet atomique
(fonction membre publique de std::atomic_flag )
(C++20)
notifie tous les threads bloqués en attente sur l'objet atomique
(fonction membre publique de std::atomic_flag )
notifie un thread bloqué dans atomic_flag_wait
(fonction)
notifie tous les threads bloqués dans atomic_flag_wait
(fonction)