Questa traduzione è incompleta. Collabora alla traduzione di questo articolo dall’originale in lingua inglese.

L' oggetto Atomics fornisce operazioni atomiche come metodi statici. Sono utilizzati con gli oggetti 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 Math).

Propertà

Atomics[Symbol.toStringTag]
Il valore di questa proprietà è "Atomics".

Metodi

Operazioni Atomiche

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.

Atomics.add()
Aggiunge un determinato valore in una determinata posizione dell'array. Restituisce il vecchio valore che occupava la medesima posizione nell'array.
Atomics.and()
Calcola un "bitwise AND" in una determinata posizione dell'array. Restituisce il vecchio valore che occupava la medesima posizione nell'array.
Atomics.compareExchange()
Memorizza un dato valore in una posizione dell'array, se questo valore è uguale ad un altro determinato valore. Restituisce il vecchio valore che occupava la medesima posizione nell'array.
Atomics.exchange()
Memorizza un dato valore in una determinata posizione nell'array. Restituisce il vecchio valore che occupava la medesima posizione nell'array.
Atomics.load()
Restituisce il valore di una determinata posizione nell'array.
Atomics.or()
Calcola un "bitwise OR" in una determinata posizione dell'array. Restituisce il vecchio valore che occupava la medesima posizione nell'array.
Atomics.store()
Memorizza un dato valore in una determinata posizione dell'array. Restituisce lo stesso valore momorizzato.
Atomics.sub()
Sottrae un determinato valore ad una data posizione dell'array. Restituisce il vecchio valore che occupava la medesima posizione nell'array.
Atomics.xor()
Calcola un "bitwise XOR" in una determinata posizione dell'array. Restituisce il vecchio valore che occupava la medesima posizione nell'array.

Wait and wake

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.

Atomics.wait()

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)

Atomics.wake()
"Sveglia" gli agenti dormienti nella coda di wait in una determinata posizione dell'array. Restituisce il numero degli agenti "svegliati".
Atomics.isLockFree(size)

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

Specifiche Status Commenti
ECMAScript Latest Draft (ECMA-262)
The definition of 'Atomics' in that specification.
Living Standard Definizione Iniziale in ES2017.
ECMAScript 2017 (ECMA-262)
The definition of 'Atomics' in that specification.
Standard  

Compatibilità con i Browser

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support No support [2] 55 (55) [1] No support No support No support
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support No support No support 55.0 (55) [1] No support No support No support

[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

Note di Compatibilità

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

  • I metodi Atomics.futexWakeOrRequeue() e Atomics.fence() sono stati completamente rimossi (bug 1259544 e bug 1225028).
  • I metodi Atomics.wait() e Atomics.wake() sono sati chiamati Atomics.futexWait() e Atomics.futexWake() (bug 1260910). Nota: I vecchi nomi sono stati rimossi nella versione 49 e successive (bug 1262062).
  • Le proprietà Atomics.OK, Atomics.TIMEDOUT, Atomics.NOTEQUAL sono state rimosse. Il metodo Atomics.wait() adesso restituisce le stringhe "ok", "timed-out" e "not-equal" (bug 1260835).
  • Il parametro count del metodo Atomics.wake() è stato cambiato: il valore di default adesso è +Infinity, e non 0 (bug 1253350).

Vedi anche

Tag del documento e collaboratori

 Hanno collaborato alla realizzazione di questa pagina: AndTemp
 Ultima modifica di: AndTemp,