¿Qué es la atómica?
- Atomics es un objeto en JavaScript que brinda la capacidad de realizar operaciones atómicas 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 una operación incorporada Atomics.and() en JavaScript que se usa para calcular un AND bit a bit con un valor dado en una posición dada en la array.
- La operación Atomics.and() devuelve el valor anterior en esa posición.
- El tipo enterodarray, el índice y el valor se pasan como argumento a la función y devuelve el valor que se ha almacenado en la array respectiva.
Sintaxis:
Atomics.and(typedArray, index, value)
Parámetros utilizados: este método acepta tres parámetros que se describen a continuación:
- typedarray: este parámetro especifica una array de tipo entero compartida Int8Array , Uint8Array , Int16Array , etc.
- index: este parámetro especifica la posición en la array, typedArray para calcular AND bit a bit.
- valor: este parámetro especifica el número para calcular AND bit a bit.
Valor devuelto: el método Atomics.and() devuelve el valor antiguo en la posición dada (typedArray[index]).
Ejemplos:
Input : arr[0] = 5 Atomics.and(arr, 0, 3) Output : 1 Input : arr[0] = 4 Atomics.and(arr, 0, 6) Output : 4
Los siguientes programas ilustran el método Atomics.and():
Programa 1:
javascript
<script type="text/javascript"> // creating a SharedArrayBuffer var buf = new SharedArrayBuffer(16); var arr = new Uint8Array(buf); // Initialising element at zeroth // position of array with 5 arr[0] = 5; // Displaying the SharedArrayBuffer console.log(Atomics.load(arr, 0)); // Displaying the return value of the // Atomics.and() method console.log(Atomics.and(arr, 0, 9)); // Displaying the updated SharedArrayBuffer console.log(Atomics.load(arr, 0)); </script>
Producción:
5 1 1
Programa 2:
javascript
<script type="text/javascript"> // creating a SharedArrayBuffer var buf = new SharedArrayBuffer(25); var arr = new Uint8Array(buf); // Initialising element at zeroth // position of array with 7 arr[0] = 7 // Displaying the SharedArrayBuffer console.log(Atomics.load(arr, 0)); // Displaying the return value of the // Atomics.and() method console.log(Atomics.and(arr, 0, 2)); // Displaying the updated SharedArrayBuffer console.log(Atomics.load(arr, 0)); </script>
Producción:
7 2 2
Aplicación:
Cada vez que queremos calcular AND bit a bit con cualquier valor y queremos devolver el valor calculado, usamos la operación Atomics.and() en JavaScript.
Veamos un programa JavaScript:
javascript
<script type="text/javascript"> // creating a SharedArrayBuffer var mybuffer = new SharedArrayBuffer(25); var myarray = new Uint8Array(mybuffer); // Initialising the element at zeroth // position of array with 11 myarray[0] = 11; // Displaying the return value of the // Atomics.and() method console.log(Atomics.and(myarray, 0, 13)); // Displaying the updated SharedArrayBuffer console.log(Atomics.load(myarray, 0)); </script>
Producción:
9 9
Excepciones:
- Si typedArray no es uno de los tipos de enteros permitidos, entonces la operación Atomics.and() arroja un TypeError.
- Si typedArray no es una array tipificada compartida, entonces la operación Atomics.and() arroja un TypeError.
- Si el índice utilizado como argumento para la operación Atomics.and() está fuera del límite en typedArray, entonces la operación Atomics.store() arroja un RangeError.
Navegador compatible:
- Google Chrome
- Borde de Microsoft
- Firefox