📜  JavaScript | Atomics.notify() 方法

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

JavaScript | Atomics.notify() 方法

在原子操作中,JavaScript 中有一个内置操作 Atomics.notify() 用于通知一些在等待队列中休眠的代理。 Atomics.notify() 方法返回许多被唤醒的代理。整数类型的数组、索引和计数作为参数传递给函数。
句法:

Atomics.notify(typedArray, index, count)

参数:此方法接受三个参数,如上所述,如下所述:

  • typedarray:此参数指定共享整数类型数组 Int16Array。
  • index:此参数指定在数组中的位置,typedArray 等待。
  • count:此参数统计要通知的休眠代理的数量。它的默认值为+Infinity。

返回值: Atomics.notify() 方法返回唤醒代理的数量。
下面的程序说明了 JavaScript 中的Atomics.notify() 方法
方案一:

javascript
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
int32[0] = 77;
console.log(int32[0]);
console.log(Atomics.store(int32, 0, 123));
console.log(Atomics.notify(int32, 0, 1));


javascript
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
int32[0] = 77;
console.log(Atomics.load(int32, 66));
console.log(int32[0]);
console.log(Atomics.store(int32, 0, 123));
console.log(Atomics.notify(int32, 6, 1));
console.log(int32[0]);


输出:

77
123
0

方案二:

javascript

const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
int32[0] = 77;
console.log(Atomics.load(int32, 66));
console.log(int32[0]);
console.log(Atomics.store(int32, 0, 123));
console.log(Atomics.notify(int32, 6, 1));
console.log(int32[0]);

输出:

0
77
123
0
123

例外:

  • 如果 typedArray 不是一个共享的 Int32Array,那么 Atomics.notify() 操作会抛出一个 TypeError。
  • 如果用作 Atomics.notify() 操作的参数的索引在 typedArray 中超出范围,则 Atomics.store() 操作会引发 RangeError。

支持的浏览器:

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