Atomics

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since December 2021.

Experimental: Esta é uma tecnologia experimental
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.

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()

Calcula um bit a bit AND na posição recebida no array. Retorna o valor anterior nesta posição.

Atomics.compareExchange()

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()

Armazena o valor recebido na posição recebida no array. Retorna o valor anterior.

Atomics.load()

Retorna o valor na posição recebida no array.

Atomics.or()

Calcula um bit a bit OR na posição recebida no array. Retorna o valor anterior nesta posição.

Atomics.store()

Armazena o valor recebido na posição recebida no array. Retorna o valor.

Atomics.sub()

Subtrai o valor recebido na posição recebida no array. Retorna o valor anterior nesta posição.

Atomics.xor()

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()

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

Atomics.wake()

"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)

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

Specification
ECMAScript Language Specification
# sec-atomics-object

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:

Veja Também