Atomics
Experimental: Esta é uma tecnologia experimental (en-US)
Verifique a tabela de compatibilidade entre Navegadores cuidadosamente antes de usar essa funcionalidade em produção.
O objeto Atomics
fornece operações atômicas como metodos estáticos. Eles são usados com objetos SharedArrayBuffer
(en-US).
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 Math
, por exemplo).
Métodos
Operações Atômicas
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.
Atomics.add()
-
Adiciona o valor recebido na posiçao recebida no array. Retorna o valor anterior nesta posição.
Atomics.and()
(en-US)-
Calcula um bit a bit AND na posição recebida no array. Retorna o valor anterior nesta posição.
Atomics.compareExchange()
(en-US)-
Armazena o valor recebido na posição recebida no array, se este foi igual ao valor recebido. Retorna o valor anterior nesta posição.
Atomics.exchange()
(en-US)-
Armazena o valor recebido na posição recebida no array. Retorna o valor anterior.
Atomics.load()
(en-US)-
Retorna o valor na posição recebida no array.
Atomics.or()
(en-US)-
Calcula um bit a bit OR na posição recebida no array. Retorna o valor anterior nesta posição.
Atomics.store()
(en-US)-
Armazena o valor recebido na posição recebida no array. Retorna o valor.
Atomics.sub()
(en-US)-
Subtrai o valor recebido na posição recebida no array. Retorna o valor anterior nesta posição.
Atomics.xor()
(en-US)-
Calcula um bit a bit XOR na posição recebida no array. Retorna o valor anterior nesta posição.
Wait e wake
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.
Atomics.wait()
(en-US)-
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 permitemwait()
na thread main do navegador). Atomics.wake()
(en-US)-
"Acorda" alguns agentes que estavam "dormindo" na lista de espera na posição recebida do array. Retorna o número de agentes que estão sendo "acordados".
Atomics.isLockFree(size)
(en-US)-
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
Especificações | Status | Comentário |
---|---|---|
Unknown The definition of 'Atomics' in that specification. |
Desconhecido | Definição inicial. |
Compatibilidade com navegadores
BCD tables only load in the browser
Observações de compatibilidade
[3] A especificação de compartilhamento de memória está sendo estabilizada. Anterior ao SpiderMonkey 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:
- Os métodos
Atomics.futexWakeOrRequeue()
eAtomics.fence()
foram totalmente removidos (bug 1259544 e bug 1225028). - O método
Atomics.wait()
(en-US) eAtomics.wake()
(en-US) foram nomeados comoAtomics.futexWait()
eAtomics.futexWake()
(bug 1260910). Os nomes antigos foram mantidos como alias, e serão removidos na versão 49 (bug 1262062). - As propriedades
Atomics.OK
,Atomics.TIMEDOUT
,Atomics.NOTEQUAL
foram removidas. O métodoAtomics.wait()
(en-US) agora retorna "ok", "timed-out" e "not-equal" (bug 1260835). - O parâmetro
count
do métodoAtomics.wake()
(en-US) foi alterado: este agora possui o valor padrão+Infinity
, e não0
(bug 1253350).
Veja Também
ArrayBuffer
- JavaScript typed arrays
- Web Workers
- parlib-simple – a simple library providing synchronization and work distribution abstractions.
- Shared Memory – a brief tutorial