什么是原子?
- Atomics 是 JavaScript 中的一个对象,它提供了作为静态方法执行原子操作的能力。
- 就像 JavaScript 中的 Math 对象一样,Atomics 的所有属性和方法也是静态的。
- 原子与 SharedArrayBuffer(通用固定长度二进制数据缓冲区)对象一起使用。
- 原子不像其他全局对象那样是构造函数。
- 原子不能与 new 运算符一起使用,也不能作为函数调用。
JavaScript 中的原子操作
当存在共享内存时,多个线程可以在内存中读写相同的数据。为了确保准确写入和读取预测值,除非当前操作完成,否则另一操作无法启动。原子操作也不能被中断。
原子.store()方法
- 在原子操作中,JavaScript 中有一个内置操作 Atomics.store(),用于在数组的特定位置存储特定值。
- Atomics.store()操作返回已存储的值。
- 整数类型数组、索引和值作为参数传递给函数,并返回已存储在相应数组中的值。
用法:
Atomics.store(typedArray, index, value)
使用的参数:
- typedarray:它是您要修改的共享整数类型数组。
- 索引:它是 typedArray 中要存储值的位置。
- value:是你要存储的数量。
返回值:Atomics.store() 返回已存储的值。
下面提供了上述函数的示例。
例子:
Input : arr[0] = 9; Atomics.store(arr, 0, 3); Output : 3 Input : arr[0] = 3; Atomics.store(arr, 0, 2); Output : 2
下面提供了上述函数的代码。
代码1:
javascript
// creating a SharedArrayBuffer
let buf = new SharedArrayBuffer(25);
let arr = new Uint8Array(buf);
// Initializing element at zeroth position of array with 9
arr[0] = 9;
// Displaying the SharedArrayBuffer
console.log(Atomics.load(arr, 0));
// Displaying the return value of the Atomics.store() method
console.log(Atomics.store(arr, 0, 3));
// Displaying the updated SharedArrayBuffer
console.log(Atomics.load(arr, 0));
输出:
9 3 3
代码2:
javascript
// creating a SharedArrayBuffer
let buf = new SharedArrayBuffer(25);
let arr = new Uint8Array(buf);
// Initializing element at zeroth position of array with 3
arr[0] = 3;
// Displaying the SharedArrayBuffer
console.log(Atomics.load(arr, 0));
// Displaying the return value of the Atomics.store() method
console.log(Atomics.store(arr, 0, 2));
// Displaying the updated SharedArrayBuffer
console.log(Atomics.load(arr, 0));
输出:
3 2 2
应用:
每当我们想要在数组的特定位置存储一个值并且还想要返回相同的值时,我们就使用 JavaScript 中的 Atomics.store() 操作。
让我们看一个 JavaScript 程序:
javascript
// creating a SharedArrayBuffer
let mybuffer = new SharedArrayBuffer(25);
let myarray = new Uint8Array(mybuffer);
// Initializing the element at zeroth position of array
myarray[0] = 40;
// Displaying the return value of the Atomics.store() method
console.log(Atomics.store(myarray, 0, 20));
// Displaying the updated SharedArrayBuffer
console.log(Atomics.load(myarray, 0));
输出:
20 20
异常:
- 如果 typedArray 不是允许的整数类型之一,则 Atomics.store( ) 操作会抛出 TypeError 。
- 如果 typedArray 不是共享类型数组,则 Atomics.store( ) 操作会抛出 TypeError。
- 如果用作 Atomics.store( ) 操作参数的索引超出了 typedArray 的范围,则 Atomics.store( ) 操作将抛出 RangeError 。
相关用法
- JavaScript Atomics sub()用法及代码示例
- JavaScript Atomics add()用法及代码示例
- JavaScript Atomics xor()用法及代码示例
- JavaScript Atomics compareExchange()用法及代码示例
- JavaScript Atomics exchange()用法及代码示例
- JavaScript Atomics isLockFree()用法及代码示例
- JavaScript Atomics or()用法及代码示例
- JavaScript Atomics load()用法及代码示例
- JavaScript Atomics waitAsync()用法及代码示例
- JavaScript Atomics and()用法及代码示例
- JavaScript Atomics.add()用法及代码示例
- JavaScript Atomics.and()用法及代码示例
- JavaScript Atomics.or()用法及代码示例
- JavaScript Atomics.isLockFree()用法及代码示例
- JavaScript Atomics.load()用法及代码示例
- JavaScript Atomics.store()用法及代码示例
- JavaScript Atomics.sub()用法及代码示例
- JavaScript Atomics.xor()用法及代码示例
- JavaScript Array length用法及代码示例
- JavaScript Array reverse()用法及代码示例
- JavaScript Array sort()用法及代码示例
- JavaScript Array fill()用法及代码示例
- JavaScript Array join()用法及代码示例
- JavaScript Array toString()用法及代码示例
- JavaScript Array pop()用法及代码示例
注:本文由纯净天空筛选整理自Shubrodeep Banerjee大神的英文原创作品 JavaScript Atomics store() Method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。