JavaScript Atomics compareExchange( ) Method
Atomics.compareExchange() Method: 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 in JavaScript exchanges the value in the array only if the passed parameter is equal to the old value at that position. Atomics.compareExchange( ) operation returns the older value residing at that position of the array whether it is equal or not to the expected value. No other write operation can happen until the modified value is written back.
Syntax:
Atomics.compareExchange(typedArray, index, expectedValue, replacementValue)
Parameters Used:
- 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.
Example 1: In this example, we will see the use of Atomics.compareExchange( ) In JavaScript.
Input : arr[0] = 9;
Atomics.compareExchange(arr, 0, 9, 5);
Output : 5
javascript
const sab = new SharedArrayBuffer(25);
let arr = new Uint8Array(sab);
arr[0] = 9;
console.log(Atomics.compareExchange(arr, 0, 9, 5));
console.log(Atomics.load(arr, 0));
|
Output :
9
5
Example 2: In this example, we will see the use of Atomics.compareExchange( ) In JavaScript.
Input : arr[0] = 3;
Atomics.compareExchange(arr, 0, 3, 6);
Output : 6
javascript
let buf = new SharedArrayBuffer(25);
let arr = new Uint8Array(buf);
arr[2] = 3;
console.log(Atomics.compareExchange(arr, 2, 3, 6));
console.log(Atomics.load(arr, 2);
|
Output :
3
6
Application: Whenever we want to exchange(only if the passed parameter equals the value) a value at a specific position of an array and also want to return the order value which was at that position of the array, we use the Atomics.compareExchange() operation in JavaScript.
Example:
javascript
let mybuffer = new SharedArrayBuffer(25);
let myarray = new Uint8Array(mybuffer);
myarray[0] = 40;
console.log(Atomics.compareExchange(myarray, 0, 40, 20));
console.log(Atomics.load(myarray, 0));
|
Output :
40
20
Exceptions:
- 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 is 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 As we read that the Atomics.compareExchange() operation in JavaScript exchanges the value in the array only if the passed parameter is equal to the old value at that position whereas the Atomics.exchange() operation in JavaScript exchanges and stores a given value at a given position in the array without comparing it with the older value residing at that position of the array. Both operations return the older value which was present at the specified position.
Supported Browser:
- Google Chrome
- Microsoft Edge
- Firefox
- Opera
- Safari
We have a complete list of Javascript Atomic methods, to check those please go through this JavaScript Atomics Complete Reference article.
We have a Cheat Sheet on Javascript where we covered all the important topics of Javascript to check those please go through Javascript Cheat Sheet-A Basic guide to JavaScript.
Last Updated :
22 May, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...