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