Atomics.waitAsync()

La méthode statique Atomics.waitAsync() permet d'attendre de façon asynchrone à un emplacement de mémoire partagée et renvoie une promesse.

À la différence de Atomics.wait(), waitAsync() n'est pas bloquante et peut être utilisée sur le fil d'exécution principal.

Note : Cette opération ne fonctionne qu'avec un tableau typé partagé entier Int32Array ou BigInt64Array.

Syntaxe

Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)

Paramètres

typedArray

Un tableau typé partagé de type Int32Array ou BigInt64Array.

index

La position au sein du tableau typé typedArray à laquelle on souhaite attendre.

value

La valeur attendue à tester.

timeout Facultatif

Le temps à attendre, exprimé en millisecondes. Par défaut, c'est la valeur Infinity qui est utilisée.

Valeur de retour

Un objet Promise dont la valeur de résolution est l'un des objets suivants :

{ async: false, value: 'ok' }
{ async: false, value: 'not-equal' } 
{ async: false, value: 'timed-out' }
{ async: true, value: promise }

Exemples

Utiliser waitAsync()

Soit un tableau de mémoire partagée Int32Array.

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

Un thread de lecture est en sommeil et attend la valeur 0 à l'emplacement 0. La promesse resultat est renvoyée immédiatement.

const resultat = Atomics.waitAsync(int32, 0, 0, 1000);
// { async: true, value: promise }

Dans le thread de lecture ou dans un autre thread, on fait appel à l'emplacement mémoire 0 et la promesse peut être résolue avec value: "ok".

Atomics.notify(int32, 0);
// { async: false, value: "ok" }

Si la résolution ne founit pas value: "ok", cela signifie que :

  • La valeur située à cet emplacement de la mémoire partagée n'était pas la valeur attendue ("not-equal")
  • Ou que la durée d'attente a expiré ("time-out").

Spécifications

Specification
Atomics.waitAsync
# atomics.waitasync

Compatibilité des navigateurs

BCD tables only load in the browser

Voir aussi