Open In App

JavaScript Atomics compareExchange( ) Method

Improve
Improve
Like Article
Like
Save
Share
Report

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




// creating a SharedArrayBuffer 
const sab = new SharedArrayBuffer(25);
let arr = new Uint8Array(sab);
  
// Initialising element at zeroth position of array with 9
arr[0] = 9;
  
// Displaying the return value of the Atomics.compareExchange() method 
console.log(Atomics.compareExchange(arr, 0, 9, 5));
  
// Displaying the updated SharedArrayBuffer 
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




// creating a SharedArrayBuffer 
let buf = new SharedArrayBuffer(25);
let arr = new Uint8Array(buf);
  
// Initialising element at second position of array with 3
arr[2] = 3;
  
// Displaying the return value of the Atomics.compareExchange() method
console.log(Atomics.compareExchange(arr, 2, 3, 6));
  
// Displaying the updated SharedArrayBuffer 
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




// creating a SharedArrayBuffer 
let mybuffer = new SharedArrayBuffer(25);
let myarray = new Uint8Array(mybuffer);
  
// Initialising the element at zeroth position of array
myarray[0] = 40;
  
// Displaying the return value of the Atomics.compareExchange() method 
console.log(Atomics.compareExchange(myarray, 0, 40, 20));
  
// Displaying the updated SharedArrayBuffer 
console.log(Atomics.load(myarray, 0));


Output :

40
20

Exceptions:

  1. If the typedArray is not one of the allowed integer types then the Atomics.compareExchange( ) operation throws a TypeError.
  2. If the typedArray is not a shared typed array then the Atomics.compareExchange( ) operation throws a TypeError.
  3. 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
Previous
Next
Share your thoughts in the comments
Similar Reads