JavaScript 中的 Atomics.exchange()
什么是原子?
- Atomics 是 JavaScript 中的一个对象,它提供了将原子操作作为静态方法执行的能力。
- 就像 JavaScript 中的 Math 对象一样,Atomics 的所有属性和方法也是静态的。
- 原子与 SharedArrayBuffer(通用固定长度二进制数据缓冲区)对象一起使用。
- 原子不是像其他全局对象那样的构造函数。
- 原子不能与 new运算符一起使用,也不能作为函数调用。
JavaScript 中的原子操作
当有共享内存时,多个线程可以在内存中读取和写入相同的数据。为确保准确写入和读取预测值,除非当前操作完成,否则无法开始另一操作。原子操作也不能中断。
Atomics.exchange() 方法
- 在原子操作中,有一个内置操作 Atomics.exchange() 用于在数组中的特定位置交换和存储新值。
- JavaScript 中的 Atomics.exchange( ) 操作返回数组中已与新值交换的旧值。
- 在读取旧值和写入新值之间不会发生其他写入操作。
Atomics.compareExchange 和 Atomics.exchange 之间的区别
正如我们所读到的,JavaScript 中的 Atomics.compareExchange() 操作仅在传递的参数等于该位置的旧值时交换数组中的值,而 JavaScript 中的 Atomics.exchange() 操作交换并存储给定值数组中的给定位置,而不将其与位于数组该位置的旧值进行比较。
这两个操作都返回存在于指定位置的旧值。
句法:
Atomics.exchange(typedArray, index, value)
使用的参数:
- typedarray:它是您要修改的共享整数类型数组。
- index:它是 typedArray 中要交换值的位置。
- value:要兑换的号码。
返回值:
Atomics.exchange() 返回给定位置(typedArray[index])的旧值。
下面提供了上述函数的示例。
例子:
Input : arr[0] = 9;
Atomics.exchange(uint8, 0, 2);
Output : 2
Input : arr[0] = 3;
Atomics.exchange(uint8, 0, 1);
Output : 1
下面提供了上述函数的代码。
代码 1:
javascript
javascript
javascript
输出 :
9
2
代码 2:
javascript
输出 :
3
1
应用:
每当我们想要在数组的特定位置交换一个值并且还想返回该数组的那个位置的旧值时,我们使用 JavaScript 中的 Atomics.exchange() 操作。
让我们看一个 JavaScript 程序:
javascript
输出 :
40
20
例外:
- 如果 typedArray 不是允许的整数类型之一,那么 Atomics.exchange() 操作会抛出 TypeError。
- 如果 typedArray 不是共享类型数组,那么 Atomics.exchange() 操作会抛出 TypeError。
- 如果用作 Atomics.exchange() 操作的参数的索引在 typedArray 中超出范围,则 Atomics.exchange() 操作会抛出 RangeError。
支持的浏览器:
- 谷歌浏览器
- 微软边缘
- 火狐