[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Atomics [Back]  [Original]

Atomics - JavaScript | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

Atomics

Baseline Large disponibilit *

Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis dcembre 2021.

* Certaines parties de cette fonctionnalit peuvent bnficier de prise en charge variables.

L'objet de l'espace de noms Atomics contient des mthodes statiques permettant d'effectuer des oprations atomiques. Elles sont utilises avec les objets SharedArrayBuffer et ArrayBuffer.

Dans cet article

Description

Contrairement la plupart des objets globaux, Atomics n'est pas un constructeur. Vous ne pouvez pas l'utiliser avec l'oprateur new ni invoquer l'objet Atomics comme une fonction. Toutes les proprits et mthodes de Atomics sont statiques (tout comme l'objet Math).

Oprations atomiques

Lorsque la mmoire est partage, plusieurs processus peuvent lire et crire les mmes donnes en mmoire. Les oprations atomiques garantissent que des valeurs prvisibles sont crites et lues, que les oprations sont termines avant que l'opration suivante ne commence et que les oprations ne sont pas interrompues.

Attente et notification

Les mthodes wait() et notify() sont modlises sur les futex Linux  fast user-space mutex  et fournissent des moyens d'attendre jusqu' ce qu'une certaine condition devienne vraie et sont gnralement utilises comme constructions bloquantes.

Proprits statiques

Atomics[Symbol.toStringTag]

La valeur initiale de la proprit [Symbol.toStringTag] est la chane  Atomics . Cette proprit est utilise dans Object.prototype.toString().

Mthodes statiques

Atomics.add()

Ajoute la valeur fournie la valeur existante l'index dfini du tableau. Retourne l'ancienne valeur cet index.

Atomics.and()

Calcule un  ET  binaire entre la valeur l'index dfini du tableau et la valeur fournie. Retourne l'ancienne valeur cet index.

Atomics.compareExchange()

Stocke la valeur fournie l'index dfini du tableau si elle est gale une valeur donne. Retourne l'ancienne valeur.

Atomics.exchange()

Stocke la valeur fournie l'index dfini du tableau. Retourne l'ancienne valeur.

Atomics.isLockFree()

Primitive d'optimisation permettant de dterminer s'il faut utiliser des verrous ou des oprations atomiques. Retourne true si une opration atomique sur des tableaux de la taille d'lment donne sera implmente par une opration atomique matrielle (plutt que par un verrou). Rserv aux expertes.

Atomics.load()

Retourne la valeur l'index dfini du tableau.

Atomics.notify()

Notifie les agents qui attendent sur l'index dfini du tableau. Retourne le nombre d'agents notifis.

Atomics.or()

Calcule un  OU  binaire entre la valeur l'index dfini du tableau et la valeur fournie. Retourne l'ancienne valeur cet index.

Atomics.pause()

Fournit une primitive de micro-attente qui indique au processeur que l'appelant effectue une boucle d'attente en attendant l'accs une ressource partage. Cela permet au systme de rduire les ressources alloues au cur (par exemple la consommation) ou au processus, sans cder l'excution du processus courant.

Atomics.store()

Stocke une valeur l'index dfini du tableau. Retourne la valeur.

Atomics.sub()

Soustrait une valeur l'index dfini du tableau. Retourne l'ancienne valeur cet index.

Atomics.wait()

Vrifie que l'index dfini du tableau contient toujours une valeur puis dort en attendant ou expire. Retourne soit "ok", "not-equal" ou "timed-out". Si l'attente n'est pas autorise dans l'agent appelant, cela lve une exception. (La plupart des navigateurs n'autoriseront pas wait() sur le processus principal du navigateur.)

Atomics.waitAsync()

Attend de manire asynchrone (c'estdire sans bloquer, contrairement Atomics.wait) sur une zone de mmoire partage et retourne un objet reprsentant le rsultat de l'opration.

Atomics.xor()

Calcule un  OU  exclusif binaire entre la valeur l'index dfini du tableau et la valeur fournie. Retourne l'ancienne valeur cet index.

Exemples

Notez que ces exemples ne peuvent pas tre excuts directement depuis la console ou une page web arbitraire, car SharedArrayBuffer n'est pas dfini moins que ses exigences de scurit ne soient respectes.

Utiliser Atomics

js
const sab = new SharedArrayBuffer(1024);
const ta = new Uint8Array(sab);

ta[0]; // 0
ta[0] = 5; // 5

Atomics.add(ta, 0, 12); // 5
Atomics.load(ta, 0); // 17

Atomics.and(ta, 0, 1); // 17
Atomics.load(ta, 0); // 1

Atomics.compareExchange(ta, 0, 5, 12); // 1
Atomics.load(ta, 0); // 1

Atomics.exchange(ta, 0, 12); // 1
Atomics.load(ta, 0); // 12

Atomics.isLockFree(1); // true
Atomics.isLockFree(2); // true
Atomics.isLockFree(3); // false
Atomics.isLockFree(4); // true

Atomics.or(ta, 0, 1); // 12
Atomics.load(ta, 0); // 13

Atomics.store(ta, 0, 12); // 12

Atomics.sub(ta, 0, 2); // 12
Atomics.load(ta, 0); // 10

Atomics.xor(ta, 0, 1); // 10
Atomics.load(ta, 0); // 11

Attente et notification

tant donn un Int32Array partag :

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

Un processus de lecture est en sommeil et attend sur l'index 0 parce que la valeur fournie correspond celle stocke l'index fourni. Le processus de lecture ne poursuivra pas son excution tant que le processus d'criture n'aura pas appel Atomics.notify() la position 0 du tableau typ fourni. Notez que si, aprs avoir t rveill, la valeur de l'index 0 n'a pas t modifie par le processus d'criture, le processus de lecture ne se remettra pas dormir, mais continuera son excution.

js
Atomics.wait(int32, 0, 0);
console.log(int32[0]); // 123

Un processus d'criture stocke une nouvelle valeur et notifie le processus en attente une fois qu'il a crit :

js
console.log(int32[0]); // 0;
Atomics.store(int32, 0, 123);
Atomics.notify(int32, 0, 1);

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-atomics-object

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page