Atomics

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since December 2021.

* Some parts of this feature may have varying levels of support.

L'objet Atomics fournit des opérations atomiques sous la forme de méthodes statiques. Celles-ci sont utilisées avec les objets SharedArrayBuffer.

Les opérations atomiques sont installées sur un module Atomics. À la différence des autres objets globaux, Atomics n'est pas un constructeur. Pour cette raison, il ne peut être utilisé avec l'opérateur Opérateurs/L_opérateur_new et il ne peut pas être appelé comme une fonction. Les propriétés et les méthodes d'Atomics sont statiques (Atomics fonctionne ainsi comme l'objet Math).

Propriétés

Atomics[Symbol.toStringTag]

La valeur de cette propriété vaut "Atomics".

Méthodes

Opérations atomiques

Lorsque la mémoire est partagée, plusieurs threads peuvent lire et écrire sur les mêmes données en mémoire. Les opérations atomiques permettent de s'assurer que des valeurs prévisibles sont écrites et lues, que les opérations sont finies avant que la prochaine débute et que les opérations ne sont pas interrompues.

Atomics.add()

Cette méthode ajoute la valeur fournie à la position indiquée dans le tableau. Elle renvoie l'ancienne valeur qui était à cette position.

Atomics.and()

Cette méthode calcule un ET binaire sur la position indiquée dans le tableau. Elle renvoie l'ancienne valeur qui était à cette position.

Atomics.compareExchange()

Cette méthode stocke la valeur fournie à la position indiquée dans le tableau si elle est égale à une valeur donnée. Elle renvoie l'ancienne valeur.

Atomics.exchange()

Cette méthode stocke la valeur fournie à la position indiquée dans le tableau. Elle renvoie l'ancienne valeur.

Atomics.load()

Cette méthode renvoie la valeur à la position indiquée dans le tableau.

Atomics.or()

Cette méthode calcule un OU binaire entre la valeur fournie et la position indiquée dans le tableau. Elle renvoie l'ancienne valeur qui était à cette position.

Atomics.store()

Cette méthode stocke une valeur à une position indiquée dans le tableau. Elle renvoie la valeur.

Atomics.sub()

Cette méthode soustrait la valeur fournie à la position indiquée dans le tableau. Elle renvoie l'ancienne valeur qui était contenue à cette position.

Atomics.xor()

Cette méthode calcule un OU exclusif binaire sur une position donnée dans le tableau. Elle renvoie l'ancienne valeur qui était à cette position.

Attente et notification (wait et notify)

Le méthodes wait() et notify() sont basées sur les futex Linux (selon le vocabulaire employé sur Linux où ça signifie « fast user-space mutex » ou encore « mutex rapide pour l'espace utilisateur ») fournissent des outils pour attendre jusqu'à ce qu'une condition donnée soit vérifiée. Généralement ces méthodes sont utilisées pour bloquer des opérations.

Atomics.wait()

Cette méthode vérifie qu'une position donnée du tableau contient bien une valeur donnée puis dort ou expire. Elle renvoie une des chaînes suivantes "ok", "not-equal", "timed-out". Si l'agent appelant ne permet pas d'attente, cela lèvera une exception Error (la plupart des navigateurs ne permettront pas que futexWait() soit utilisé sur le thread principal du navigateur).

Atomics.notify()

Cette méthode notifient les agents qui attendent dans la file d'attente à une position donnée. Elle renvoie le nombre d'agents notifiés.

Atomics.isLockFree()

Une primitive d'optimisation qui peut être utilisée afin de déterminer s'il faut utiliser des verrous (locks) ou des opérations atomiques. Elle renvoie true si la taille donnée est l'une des propriétés BYTES_PER_ELEMENT des types TypedArray et qu'on peut donc implémenter l'opération de façon atomique plutôt que d'utiliser un verrou.

Spécifications

Specification
ECMAScript® 2025 Language Specification
# sec-atomics-object

Compatibilité des navigateurs

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
Atomics
Atomic operations on non-shared ArrayBuffer objects
add
and
compareExchange
exchange
isLockFree
load
notify
or
pause
Experimental
store
sub
wait
waitAsync
xor

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
In development. Supported in a pre-release version.
In development. Supported in a pre-release version.
No support
No support
Experimental. Expect behavior to change in the future.
See implementation notes.

Voir aussi