¿Qué es la atómica?
Atomics es un objeto en JavaScript que proporciona operaciones atómicas que se realizarán como métodos estáticos. Al igual que el objeto Math en JavaScript, todas las propiedades y métodos de Atomics también son estáticos.
Los elementos atómicos se utilizan con objetos SharedArrayBuffer (búfer genérico de datos binarios de longitud fija). Los átomos no son constructores como otros objetos globales. Atomics no se puede usar con un nuevo operador o se puede invocar como una función.
Operaciones atómicas en JavaScript
Múltiples subprocesos pueden leer y escribir los mismos datos en la memoria cuando hay memoria compartida. Para garantizar que los valores predichos se escriban y lean con precisión, no se puede iniciar otra operación hasta que finalice la actual. Las operaciones atómicas tampoco se pueden interrumpir.
Método Atomics.and()
Entre las operaciones atómicas, hay un método Atomics.xor() que se usa para calcular una operación XOR bit a bit con un valor dado en una posición dada en una array. El valor anterior en esa posición lo devuelve la función Atomics.xor(). No se puede realizar ninguna otra operación de escritura hasta que se vuelva a escribir el valor modificado.
Sintaxis:
Atomics.xor(typedArray, index, value)
Parámetros utilizados:
- typedarray : es la array de tipo entero compartida que desea modificar.
- index : es la posición en typedArray donde desea calcular XOR bit a bit.
- value : Es el número con el que desea calcular el XOR bit a bit.
Valor devuelto:
Atomics.xor() devuelve el valor anterior en la posición dada (typedArray[index]).
A continuación se proporcionan ejemplos de la función anterior.
Ejemplos:
Input : arr[0] = 9; Atomics.xor(arr, 0, 3); Output : 9 Input : arr[0] = 3; Atomics.xor(arr, 0, 2); Output : 3
Los códigos para la función anterior se proporcionan a continuación.
Código 1:
html
<script> <!-- creating a SharedArrayBuffer --> var buf = new SharedArrayBuffer(25); var arr = new Uint8Array(buf); <!-- Initialising element at zeroth position of array with 9 --> arr[0] = 9; <!-- 9 (1001) OR 3 (0011) = 10 (1010) --> <!-- Displaying the return value of the Atomics.xor() method --> console.log(Atomics.xor(arr, 0, 3)); <!-- Displaying the updated SharedArrayBuffer --> console.log(Atomics.load(arr, 0)); </script>
PRODUCCIÓN:
9 10
Código 2:
html
<script> <!-- creating a SharedArrayBuffer --> var buf = new SharedArrayBuffer(25); var arr = new Uint8Array(buf); <!-- Initialising element at zeroth position of array with 3 --> arr[0] = 3; <!-- 3 (0011) AND 2 (0010) = 3 (0001) --> <!-- Displaying the return value of the Atomics.xor() method --> console.log(Atomics.xor(arr, 0, 2)); <!-- Displaying the updated SharedArrayBuffer --> console.log(Atomics.load(arr, 0)); </script>
PRODUCCIÓN:
3 1
Excepciones:
- Lanza un TypeError, si typedArray no es uno de los tipos de enteros permitidos.
- Lanza un TypeError, si typedArray no es un tipo de array compartida.
- Lanza un RangeError, si el índice está fuera de los límites en typedArray.
Navegador compatible:
- Google Chrome
- Borde de Microsoft
- Firefox
Publicación traducida automáticamente
Artículo escrito por Shubrodeep Banerjee y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA