std:: atomic_wait, std:: atomic_wait_explicit
|
Défini dans l'en-tête
<atomic>
|
||
|
template
<
class
T
>
void
atomic_wait
(
const
std::
atomic
<
T
>
*
object,
|
(1) | (depuis C++20) |
|
template
<
class
T
>
void
atomic_wait
(
const
volatile
std::
atomic
<
T
>
*
object,
|
(2) | (depuis C++20) |
|
template
<
class
T
>
void
atomic_wait_explicit
(
const
std::
atomic
<
T
>
*
object,
|
(3) | (depuis C++20) |
|
template
<
class
T
>
void
atomic_wait_explicit
(
const
volatile
std::
atomic
<
T
>
*
object,
|
(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.
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
|
Cette section est incomplète
Raison : aucun 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>
)
|
|
(C++20)
|
notifie un thread bloqué dans atomic_wait
(fonction template) |
|
(C++20)
|
notifie tous les threads bloqués dans atomic_wait
(fonction template) |