--- 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)}}).