std::atomic_ref<T>:: wait
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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
|
Cette section est incomplète
Raison : aucun 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) |
|
|
(C++20)
|
notifie un thread bloqué dans atomic_wait
(fonction template) |
|
(C++20)
|
notifie tous les threads bloqués dans atomic_wait
(fonction template) |