在线文档教程

Atomics

Atomics

Atomics 对象提供了一组静态方法用来对 SharedArrayBuffer对象进行原子操作。

这些原子操作属于 Atomics模块。与一般的全局对象不同,Atomics不是构造函数,因此不能使用new操作符调用,也不能将其当作函数直接调用。Atomics的所有属性和方法都是静态的(与 Math 对象一样)。

属性

Atomics[Symbol.toStringTag]该属性的值为“Atomics”。

方法

原子操作

多个共享内存的线程能够同时读写同一位置上的数据。原子操作会确保正在读或写的数据的值是符合预期的,即下一个原子操作一定会在上一个原子操作结束后才会开始,其操作过程不会中断。

Atomics.add()将指定位置上的数组元素与给定的值相加,并返回相加前该元素的值。

等待和唤醒

wait()wake()方法采用的是 Linux 上的 futexes 模型(fast user-space mutex,快速用户空间互斥量),可以让进程一直等待直到某个特定的条件为真,主要用于实现阻塞。

Atomics.wait()

检测数组中某个指定位置上的值是否仍然是给定值,是则保持挂起直到被唤醒或超时。返回值为 "ok"、"not-equal" 或 "time-out"。调用时,如果当前线程不允许阻塞,则会抛出异常(大多数浏览器都不允许在主线程中调用wait())。

Atomics.wake()

可以用来检测当前系统是否支持硬件级的原子操作。对于指定大小的数组,如果当前系统支持硬件级的原子操作,则返回true;否则就意味着对于该数组,Atomics对象中的各原子操作都只能用锁来实现。此函数面向的是技术专家。

规范

SpecificationStatusComment
ECMAScript Latest Draft (ECMA-262)The definition of 'Atomics' in that specification.Living StandardInitial definition in ES2017.
ECMAScript 2017 (ECMA-262)The definition of 'Atomics' in that specification.Standard

浏览器兼容性

FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support60 21655 (55) 1No supportNo supportNo support

FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic supportNo supportNo support55.0 (55) 1No supportNo supportNo support