JavaScript | Atomics.wait() 方法
在原子操作中,JavaScript 中有一个内置操作 Atomics.wait() 用于验证Int32Array中的给定位置是否仍然包含给定值,如果是,则休眠,等待唤醒或超时。 Atomics.wait()操作返回一个“ok”、“not-equal”或“timed-out”的字符串。整数类型数组、索引和值作为参数传递给函数,超时也是一个参数,但它是可选的。
句法:
Atomics.wait(typedArray, index, value, timeout)
参数:此方法接受上面提到的四个参数,如下所述:
- typedarray:此参数指定共享整数类型数组 Int16Array。
- index:此参数指定在数组中的位置,typedArray 等待。
- value:此参数指定要测试的预期值。
- timeout:此参数是可选参数。是时候以毫秒为单位等待了。
返回值: Atomics.wait()方法返回“ok”、“not-equal”或“timed-out”的字符串。
例子:
Input: arr[0] = 5
Atomics.wait(arr, 0, 0, 1)
Output: not-equal
Input: arr[0] = 4
Atomics.wait(arr, 1, 0, 1)
Output: time-out
下面的程序说明了 JavaScript 中的Atomics.wait() 方法:
方案一:
javascript
var buf = new SharedArrayBuffer(1024);
var arr = new Int32Array(buf);
arr[0] = 5;
console.log(Atomics.load(arr, 0));
console.log(Atomics.and(arr, 0, 9));
console.log(Atomics.wait(arr, 0, 0, 1));
console.log(Atomics.load(arr, 0));
javascript
var buf = new SharedArrayBuffer(1024);
var arr = new Int32Array(buf);
arr[0] = 5;
console.log(Atomics.load(arr, 0));
console.log(Atomics.and(arr, 0, 9));
console.log(Atomics.wait(arr, 1, 0, 1));
console.log(Atomics.load(arr, 0));
输出:
5
5
not-equal
1
方案二:
javascript
var buf = new SharedArrayBuffer(1024);
var arr = new Int32Array(buf);
arr[0] = 5;
console.log(Atomics.load(arr, 0));
console.log(Atomics.and(arr, 0, 9));
console.log(Atomics.wait(arr, 1, 0, 1));
console.log(Atomics.load(arr, 0));
输出:
5
5
time-out
1
例外:
- 如果 typedArray 不是共享的 Int32Array,则 Atomics.wait() 操作会引发 TypeError。
- 如果用作 Atomics.wait() 操作的参数的索引在 typedArray 中超出范围,则 Atomics.store() 操作会引发 RangeError。
支持的浏览器:
- 谷歌浏览器
- 微软边缘
- 火狐