Atomics.compareExchange()

The static Atomics.compareExchange() method exchanges a given replacement value at a given position in the array, and returns the old value at that position, if a given expected value equals the old value. This atomic operation guarantees that no other write happens until the modified value is written back.

Syntax

Atomics.compareExchange(typedArray, index, expectedValue, replacementValue)

Parameters

typedArray
A shared integer typed array. One of Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, or Uint32Array.
index
The position in the typedArray to exchange a value.
expectedValue
The value to check for equality.
replacementValue
The number to exchange.

Return value

The old value at the given position (typedArray[index]).

Exceptions

  • Throws a TypeError, if typedArray is not one of the allowed integer types.
  • Throws a TypeError, if typedArray is not a shared typed array type.
  • Throws a RangeError, if index is out of bounds in the typedArray.

Examples

var sab = new SharedArrayBuffer(1024);
var ta = new Uint8Array(sab);
ta[0] = 7;
Atomics.compareExchange(ta, 0, 7, 12); // returns 7, the old value
Atomics.load(ta, 0); // 12

Specifications

Specification Status Comment
ECMAScript Latest Draft (ECMA-262)
The definition of 'Atomics.compareExchange' in that specification.
Draft Initial definition in ES2017.

Browser compatibility

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support No support [2] No support 55 (55) [1] No support No support No support
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support No support No support 55.0 (55) [1] No support No support No support

[1] In Firefox version 46 until version 54, this feature is disabled by a preference setting. In about:config, set javascript.options.shared_memory to true

[2] The implementation is under development and needs these runtime flags: --js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer

See also

Document Tags and Contributors

 Contributors to this page: fscholz
 Last updated by: fscholz,