--- title: Atomics slug: Web/JavaScript/Reference/Global_Objects/Atomics tags: - JavaScript - Mémoire partagée - Reference translation_of: Web/JavaScript/Reference/Global_Objects/Atomics original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics ---
L'objet Atomics
fournit des opérations atomiques sous la forme de méthodes statiques. Celles-ci sont utilisées avec les objets {{jsxref("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 {{jsxref("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 {{jsxref("Math")}}).
Atomics[Symbol.toStringTag]
La valeur de cette propriété vaut "Atomics"
.
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.
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.
"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).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écification | État | Commentaires |
---|---|---|
{{SpecName('ESDraft', '#sec-atomics-object', 'Atomics')}} | {{Spec2('ESDraft')}} | |
{{SpecName('ES8', '#sec-atomics-object', 'Atomics')}} | {{Spec2('ES8')}} | Définition initiale. |
{{Compat("javascript.builtins.Atomics")}}
Avant Firefox 48 {{geckoRelease(48)}}, les noms les plus récents et la sémantique la plus récente n'étaient pas encore implémentés. Les changements qui ont eu lieu entre la version 46 et la version 48 de Firefox sont :
Atomics.futexWakeOrRequeue()
et Atomics.fence()
sont désormais complètement retirées (cf. {{bug(1259544)}} et {{bug(1225028)}}).Atomics.futexWait()
ete Atomics.futexWake()
(cf. {{bug(1260910)}}). Les anciens noms seront définitivement supprimés à partir de la version 49 ({{bug(1262062)}}). Atomics.wake()
a été renommé en Atomics.notify()
à partir de la version 63.Atomics.OK
, Atomics.TIMEDOUT
, Atomics.NOTEQUAL
ont été retirées. La méthode {{jsxref("Atomics.wait()")}} renvoie désormais les chaînes de caractères "ok"
, "timed-out"
ou "not-equal"
(cf. {{bug(1260835)}}).Le paramètre count
de la méthode {{jsxref("Atomics.wake()")}} a été modifié, sa valeur par défaut est désormais +Infinity
et non 0
({{bug(1253350)}}).