Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

Atomics : méthode statique wait()

Baseline Widely available

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis ⁨décembre 2021⁩.

La méthode statique wait() de l'objet Atomics vérifie qu'un emplacement de mémoire partagée contient une valeur donnée et, si c'est le cas, se met en sommeil en attendant une notification de réveil ou l'expiration d'un délai. Elle retourne une chaîne de caractères valant "not-equal" si l'emplacement mémoire ne correspond pas à la valeur donnée, "ok" si elle est réveillée par Atomics.notify(), ou "timed-out" si le délai expire.

Atomics.wait() et Atomics.notify() sont utilisés ensemble pour permettre la synchronisation des processus basée sur une valeur en mémoire partagée. Un processus peut continuer immédiatement si la valeur de synchronisation a changé, ou attendre la notification d'un autre processus lorsqu'il atteint le point de synchronisation.

Cette méthode ne fonctionne qu'avec un Int32Array ou un BigInt64Array qui observe un SharedArrayBuffer. Elle est bloquante et ne peut pas être utilisée dans le thread principal. Pour une version non bloquante et asynchrone de cette méthode, voir Atomics.waitAsync().

Syntaxe

js
Atomics.wait(typedArray, index, value)
Atomics.wait(typedArray, index, value, timeout)

Paramètres

typedArray

Un tableau typé partagé de type Int32Array.

index

La position du tableau typé typedArray sur laquelle on attend un changement.

value

La valeur attendue qu'on souhaite tester.

timeout Facultatif

Le temps à attendre pour le changement de valeur, exprimé en millisecondes. La valeur par défaut est Infinity.

Valeur de retour

Une chaîne de caractères qui vaut "ok", "not-equal" ou "timed-out" selon le cas.

  • "not-equal" est retournée immédiatement si la value initiale n'est pas égale à la valeur stockée à index.
  • "ok" est retournée si elle est réveillée par un appel à Atomics.notify(), indépendamment du fait que la valeur attendue ait changé ou non.
  • "timed-out" est retournée si une attente en sommeil dépasse le timeout spécifié sans être réveillée par Atomics.notify().

Exceptions

TypeError

Levée dans l'un des cas suivants :

  • Si typedArray n'est pas un Int32Array ou un BigInt64Array qui observe un SharedArrayBuffer.
  • Si le processus courant ne peut pas être bloqué (par exemple, parce qu'il s'agit du processus principal).
RangeError

Levée si index est hors des limites de typedArray.

Exemples

Utilisation de wait()

Étant donné un Int32Array partagé :

js
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);

Un processus de lecture est en sommeil et attend l'emplacement 0 parce que la value fournie correspond à ce qui est stocké à un index donné. Le processus de lecture ne reprend pas l'exécution tant que le processus d'écriture n'a pas appelé Atomics.notify() sur la position 0 du typedArray fourni. Remarquez que si, après le réveil, la valeur de l'emplacement 0 n'a pas été modifiée par le processus d'écriture, le processus de lecture ne se remettra pas en sommeil, mais continuera son exécution.

js
Atomics.wait(int32, 0, 0);
console.log(int32[0]); // 123

Un processus d'écriture stocke une nouvelle valeur et notifie le processus en attente une fois l'écriture effectuée :

js
console.log(int32[0]); // 0;
Atomics.store(int32, 0, 123);
Atomics.notify(int32, 0, 1);

Spécifications

Specification
ECMAScript® 2026 Language Specification
# sec-atomics.wait

Compatibilité des navigateurs

Voir aussi