std::atomic_flag:: wait
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
(C++20)
|
||||
|
atomic_flag::wait
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
|
void
wait
(
bool
old,
std::
memory_order
order
=
std:: memory_order_seq_cst ) const noexcept ; |
(1) |
(depuis C++20)
(constexpr depuis C++26) |
|
void
wait
(
bool
old,
std::
memory_order
order
=
|
(2) | (depuis C++20) |
Effectue des opérations d'attente atomiques. Se comporte comme s'il effectuait répétitivement les étapes suivantes :
-
Compare
this
-
>
test
(
order
)
avec celui de
old
.
- S'ils sont égaux, alors se bloque jusqu'à ce que * this soit notifié par notify_one() ou notify_all() , ou que le thread soit débloqué de manière sporadique.
- Sinon, retourne.
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
atomic_flag
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.
Exemple
|
Cette section est incomplète
Raison : aucun exemple |
Voir aussi
|
(C++20)
|
notifie au moins un thread en attente sur l'objet atomique
(fonction membre publique) |
|
(C++20)
|
notifie tous les threads bloqués en attente sur l'objet atomique
(fonction membre publique) |
|
(C++20)
|
notifie un thread bloqué dans atomic_flag_wait
(fonction) |
|
(C++20)
|
notifie tous les threads bloqués dans atomic_flag_wait
(fonction) |