非常教程

JavaScript参考手册

Atomics

Atomics

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

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

属性

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

方法

原子操作

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

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

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

Atomics.compareExchange()如果数组中指定的元素与给定的值相等,则将其更新为新的值,并返回该元素原先的值。Atomics.exchange()将数组中指定的元素更新为给定的值,并返回该元素更新前的值。

Atomics.load()返回数组中指定元素的值。

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

Atomics.store()将数组中指定的元素设置为给定的值,并返回该值。

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

Atomics.xor()将指定位置上的数组元素与给定的值相异或,并返回异或操作前该元素的值。

等待和唤醒

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

Atomics.wait()

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

Atomics.wake()

唤醒等待队列中正在数组指定位置的元素上等待的线程。返回值为成功唤醒的线程数量。

Atomics.isLockFree(size)

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

规范

Specification

Status

Comment

ECMAScript Latest Draft (ECMA-262)The definition of 'Atomics' in that specification.

Living Standard

Initial definition in ES2017.

ECMAScript 2017 (ECMA-262)The definition of 'Atomics' in that specification.

Standard

浏览器兼容性

Feature

Chrome

Edge

Firefox (Gecko)

Internet Explorer

Opera

Safari

Basic support

60 2

16

55 (55) 1

No support

No support

No support

Feature

Android

Chrome for Android

Firefox Mobile (Gecko)

IE Mobile

Opera Mobile

Safari Mobile

Basic support

No support

No support

55.0 (55) 1

No support

No support

No support

Atomics
Atomics 详细
Atomics.add 详细
Atomics.and 详细
Atomics.compareExchange 详细
Atomics.exchange 详细
Atomics.isLockFree 详细
Atomics.load 详细
Atomics.or 详细
Atomics.store 详细
Atomics.sub 详细
Atomics.wait 详细
Atomics.wake 详细
Atomics.xor 详细
JavaScript

JavaScript 是一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的解释型语言。它已经由ECMA(欧洲电脑制造商协会)通过 ECMAScript 实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器( Chrome、IE、FireFox、Safari、Opera )支持。JavaScript 是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持 I/O,比如网络