What is Atomics?
- Atomics are used with SharedArrayBuffer(generic fixed-length binary data buffer) objects.
- Atomics are not constructors like other global objects.
- Atomics cannot be used with a new operator or can be invoked as a function.
Multiple threads can read and write the same data in memory when there shared memory is. To ensure that predicted values are written and read accurately, another operation cannot start until and unless the current one finishes. Atomic operations also cannot be interrupted.
- Among the Atomic Operations, there is an inbuilt method Atomics.compareExchange() which is used to exchange a value at a specific position of an array if the passed parameter is equal to the old value residing in the array.
- Atomics.compareExchange( ) operation returns the older value residing at that position of the array whether if its equal or not to the expected value.
- No other write operation can happen until the modified value is written back.
Atomics.compareExchange(typedArray, index, expectedValue, replacementValue)
- typedarray: It is the shared integer typed array you want to modify.
- index: It is the position in the typedArray from where you want to exchange a value.
- expectedValue : It is the number for which equality has to be checked.
- replacementValue : It is the number to be exchanged.
- Atomics.compareExchange() returns the old value at the given position (typedArray[index]).
Examples of the above function are provided below.
Input : arr = 9; Atomics.compareExchange(arr, 0, 9, 5); Output : 5
Input : arr = 3; Atomics.compareExchange(arr, 0, 3, 6); Output : 6
Codes for the above function are provided below.
// creating a SharedArrayBuffer
// Initialising the element at zeroth position of array
myarray = 40;
// Displaying the return value of the Atomics.compareExchange() method
console.log(Atomics.compareExchange(myarray, 0, 40, 20));
// Displaying the updated SharedArrayBuffer
- If the typedArray is not one of the allowed integer types then the Atomics.compareExchange( ) operation throws a TypeError.
- If the typedArray is not a shared typed array then the Atomics.compareExchange( ) operation throws a TypeError.
- If the index used as an argument to the Atomics.compareExchange( ) operation is out of the bound in the typedArray then the Atomics.compareExchange( ) operation throws a RangeError.
Difference between Atomics.compareExchange and Atomics.exchange
Both the operations return the older value which was present at the specified position.
- Google Chrome
- Microsoft Edge