--- title: Atomics slug: Web/JavaScript/Reference/Global_Objects/Atomics translation_of: Web/JavaScript/Reference/Global_Objects/Atomics ---
L' oggetto Atomics fornisce operazioni atomiche come metodi statici. Sono utilizzati con gli oggetti {{jsxref("SharedArrayBuffer")}}.
Le operazioni atomiche sono implementate nel modulo Atomics. Diversamente dagli altri oggetti global, Atomics non è un constructor. Non è, quindi, possibile utilizzarlo con new operator o invocare l'oggetto Atomics come una funzione. Tutte le proprietà ed i metodi di Atomics sono statici (come per esempio nel caso dell'oggetto {{jsxref("Math")}}).
Atomics[Symbol.toStringTag]Quando la memoria è condivisa, molti thread possono leggere e scrivere gli stessi dati in memoria. Le operazioni atomiche fanno in modo che: siano scritti e letti valori predicibili, che ciscuna operazione termini prima che la successiva abbia inizio e che ciascuna operazione non sia interrotta.
I metodi wait() e wake() sono modellati sul futexes ("fast user-space mutex") di Linux e forniscono metodi di attesa finchè una certa condizione non diventa vera e sono tipicamente utilizzati in costrutti bloccanti.
Verifica che una certa posizione dell'array continui a contenere un determinato valore e si mette in attesa o va in time-out. Restituisce i valori "ok", "not-equal", oppure "timed-out". Se l'attesa non è consentita dall'agente che effettua la chiamata, allora il metodo innesca una "Error Exception" (molti browsers non consentiranno wait() nel loro thread principale)
Un primitiva di ottimizzazione che può essere utilizzata per determinare quando utilizzare "lock" o operazioni atomiche. Restituisce true, se un operazione atomica su un array di una data dimensione può essere implementata utilizzando operazioni atomiche hardware (invece del "lock"). Solo per esperti.
| Specifiche | Status | Commenti |
|---|---|---|
| {{SpecName('ESDraft', '#sec-atomics-object', 'Atomics')}} | {{Spec2('ESDraft')}} | Definizione Iniziale in ES2017. |
| {{SpecName('ES8', '#sec-atomics-object', 'Atomics')}} | {{Spec2('ES8')}} |
{{CompatibilityTable}}
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | {{CompatNo}} [2] | {{CompatGeckoDesktop("55")}} [1] | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | {{CompatNo}} | {{CompatNo}} | {{CompatGeckoMobile("55")}} [1] | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
[1] In Firefox, dalla versione 46 alla versione 54 questa feature è disabilitata da una configurazione avenzata. In about:config, configurare javascript.options.shared_memory a true.
[2] L' implementazione è in via di sviluppo e richiede i flag di runtime: --js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer
Prima di SpiderMonkey 48 {{geckoRelease(48)}}, i nomi e le semantiche delle API non erano ancora state implementate. Le modifiche tra la versione 46 e la versione 48 di Firefox, sono:
Atomics.futexWakeOrRequeue() e Atomics.fence() sono stati completamente rimossi ({{bug(1259544)}} e {{bug(1225028)}}).Atomics.futexWait() e Atomics.futexWake() ({{bug(1260910)}}). Nota: I vecchi nomi sono stati rimossi nella versione 49 e successive ({{bug(1262062)}}).Atomics.OK, Atomics.TIMEDOUT, Atomics.NOTEQUAL sono state rimosse. Il metodo {{jsxref("Atomics.wait()")}} adesso restituisce le stringhe "ok", "timed-out" e "not-equal" ({{bug(1260835)}}).Il parametro count del metodo {{jsxref("Atomics.wake()")}} è stato cambiato: il valore di default adesso è +Infinity, e non 0 ({{bug(1253350)}}).