📜  JavaScript | Atomics.wait() 方法

📅  最后修改于: 2022-05-13 01:56:43.001000             🧑  作者: Mango

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。

支持的浏览器:

  • 谷歌浏览器
  • 微软边缘
  • 火狐