--- title: Atomics slug: Web/JavaScript/Reference/Global_Objects/Atomics translation_of: Web/JavaScript/Reference/Global_Objects/Atomics ---
O objeto Atomics
fornece operações atômicas como metodos estáticos. Eles são usados com objetos {{jsxref("SharedArrayBuffer")}}.
As operações atômicas estão localizadas no modulo Atomics
. Diferente de outros global objects, Atomics
não é um construtor. Você não deve usa-lo com o new
operator ou invocar objetos Atomics
como funções. Todas as propriedades e método do Atomics
são estáticos (como é o caso com o objeto {{jsxref("Math")}}, por exemplo).
Quando a memória é compartilhada, multiplas threads podem ser lidas e escritas no mesmo dado da memória. Operações atômicas garantem que os valores previstos sejam lidos e escritos, estas operações são finalizadas antes da próxima operação iniciar e que as mesmas não sejam interrompidas.
Os métodos wait()
e wake()
são modelados no Linux futexes ("fast user-space mutex") e fornece formas de aguardar até que certas condições se tornem true
e são tipicamente usadas como construtores de bloco.
Verifica se a posição informada no array ainda contém a valor recebido e dorme à espera ou até o tempo limite. Retorna "ok"
, "not-equal"
, ou "timed-out"
. Se a espera não for permitida no agente de chamada ele irá lançar uma exceção de erro (muitos navegadores não permitem wait()
na thread main do navegador).
Uma otimização primitiva que pode ser usada para determinar se deve ser usado lock ou operações atômicas. Retorna true
, se uma operação atômica em matrizes de um dado tamanho do elemento vai ser implementado utilizando uma operação atômica de hardware (como oposição a lock). Só para experientes.
Especificações | Status | Comentário |
---|---|---|
{{SpecName('Shared Memory', '#AtomicsObject', 'Atomics')}} | {{Spec2('Shared Memory')}} | Definição inicial. |
{{CompatibilityTable}}
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic support | {{CompatNo}} [2] | {{CompatNo}} | {{CompatGeckoDesktop("46")}} [1] [3] | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | {{CompatNo}} | {{CompatNo}} | {{CompatGeckoMobile("46")}} [1] | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
[1] This feature is disabled by a preference setting. In about:config, set javascript.options.shared_memory
to true
.
[2] The implementation is under development and needs these runtime flags: --js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer
[3] A especificação de compartilhamento de memória está sendo estabilizada. Anterior ao SpiderMonkey 48 {{geckoRelease(48)}}, a última API e semântica não foram implementadas ainda. As alterações entre as versões 46 e 48 do Firefox são:
Atomics.futexWakeOrRequeue()
e Atomics.fence()
foram totalmente removidos ({{bug(1259544)}} e {{bug(1225028)}}).Atomics.futexWait()
e Atomics.futexWake()
({{bug(1260910)}}). Os nomes antigos foram mantidos como alias, e serão removidos na versão 49 ({{bug(1262062)}}).Atomics.OK
, Atomics.TIMEDOUT
, Atomics.NOTEQUAL
foram removidas. O método {{jsxref("Atomics.wait()")}} agora retorna "ok", "timed-out" e "not-equal" ({{bug(1260835)}}).O parâmetro count
do método {{jsxref("Atomics.wake()")}} foi alterado: este agora possui o valor padrão +Infinity
, e não 0
({{bug(1253350)}}).