MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-survey

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 une valeur donnée à une position donnée dans le tableau. Elle renvoie l'ancienne valeur qui était à cette position.
Atomics.and()
Cette méthode calcule un ET binaire sur une position donnée dans le tableau. Elle renvoie l'ancienne valeur qui était à cette position.
Atomics.compareExchange()
Cette méthode stocke une valeur donnée à une position donnée dans le tableau si elle est égale à une valeur donnée. Elle renvoie l'ancienne valeur.
Atomics.exchange()
Cette méthode stocke une valeur donnée à une position donnée dans le tableau. Elle renvoie l'ancienne valeur.
Atomics.load()
Cette méthode renvoie la valeur à une position donnée dans le tableau.
Atomics.or()
Cette méthode calcule un OU binaire sur une position donnée dans le tableau. Elle renvoie l'ancienne valeur qui était à cette position.
Atomics.store()
Cette méthode stocke une valeur donnée à une position donnée dans le tableau. Elle renvoie l'ancienne valeur.
Atomics.sub()
Cette méthode soustrait une valeur donnée à une position donnée du 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 réveil (wait et wake)

Le méthodes wait() et wake() 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.futexWake()
Cette méthode réveille des agents qui dorment dans la file d'attente à une position donnée. Elle renvoie le nombre d'agents réveillé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

Spécification État Commentaires
ECMAScript Latest Draft (ECMA-262)
La définition de 'Atomics' dans cette spécification.
Standard évolutif  
ECMAScript 2017 (ECMA-262)
La définition de 'Atomics' dans cette spécification.
Standard Définition initiale.

Compatibilité des navigateurs

FonctionnalitéChromeEdgeFirefoxInternet ExplorerOperaSafari
Support simple6016

55

46 — 541

Non Non10.1
add6016

55

46 — 541

Non Non10.1
and6016

55

46 — 541

Non Non10.1
compareExchange6016

55

46 — 541

Non Non10.1
exchange6016

55

46 — 541

Non Non10.1
isLockFree6016

55

46 — 541

Non Non10.1
load6016

55

46 — 541

Non Non10.1
or6016

55

46 — 541

Non Non10.1
store6016

55

46 — 541

Non Non10.1
sub6016

55

46 — 541

Non Non10.1
wait6016

55

46 — 541 2

Non Non10.1
wake60316

55

46 — 541 4

Non Non10.1
xor6016

55

46 — 541

Non Non10.1
FonctionnalitéAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Support simple6060 ?

55

46 — 541

Non Non Non
add6060 ?

55

46 — 541

Non Non Non
and6060 ?

55

46 — 541

Non Non Non
compareExchange6060 ?

55

46 — 541

Non Non Non
exchange6060 ?

55

46 — 541

Non Non Non
isLockFree6060 ?

55

46 — 541

Non Non Non
load6060 ?

55

46 — 541

Non Non Non
or6060 ?

55

46 — 541

Non Non Non
store6060 ?

55

46 — 541

Non Non Non
sub6060 ?

55

46 — 541

Non Non Non
wait6060 ?

55

46 — 541 2

Non Non Non
wake6060 ?

55

46 — 541 4

Non Non Non
xor6060 ?

55

46 — 541

Non Non Non

1. From version 46 until version 54 (exclusive): this feature is behind the javascript.options.shared_memory preference (needs to be set to true). To change preferences in Firefox, visit about:config.

2. In versions 46 and 47, this method was named Atomics.futexWait() and the properties Atomics.OK, Atomics.TIMEDOUT, Atomics.NOTEQUAL were returned instead of the strings.

3. The count parameter defaults to 0, instead of +Infinity.

4. In versions 46 and 47, this method was named Atomics.futexWake() and the count parameter defaulted to 0.

Notes de compatibilité

Avant Firefox 48 (Firefox 48 / Thunderbird 48 / SeaMonkey 2.45), 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 :

  • Les méthodes Atomics.futexWakeOrRequeue() et Atomics.fence() sont désormais complètement retirées (cf. bug 1259544 et bug 1225028).
  • Les méthodes Atomics.wait() et  Atomics.wake() qui étaient nommées Atomics.futexWait() ete Atomics.futexWake() (cf. bug 1260910). Les anciens noms seront  définitivement supprimés à partir de la version 49 (bug 1262062).
  • Les propriétés Atomics.OK, Atomics.TIMEDOUT, Atomics.NOTEQUAL ont été retirées. La méthode 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 Atomics.wake() a été modifié, sa valeur par défaut est désormais +Infinity et non 0 (bug 1253350).

Voir aussi

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight
 Dernière mise à jour par : SphinxKnight,