MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

В процессе перевода.

Объект Atomics предоставляет атомарные операции как статические методы. Используется вместе с объектом SharedArrayBuffer
 

Атомарные операции установлены в модуле Atomics. В отличие от других глобальных объектов, Atomics не является конструктором. Его нельзя использовать вместе с оператором new или вызывать объект Atomics как функцию. Все свойства и методы Atomics статические (как у объекта Math, к примеру).

Свойства

Atomics[Symbol.toStringTag]
Значение этого свойства - "Atomics".

Методы

Атомарные операции

Когда память разделена, несколько потоков могут читать и записывать одни и те же данные в память. Атомарные операции гарантируют, что ожидаемые значения будут записаны и прочитаны, а операции завершены, прежде чем следующая операция начнет свою работу, и они не будут прерваны.

Atomics.add()
Добавляет представленное значение к текущему по указанной позиции в массиве. Возвращает предыдущее значение в этой позиции.
Atomics.and()
Вычисляет побитовое AND в указанной позиции массива. Возвращает предыдущее значение в этой позиции.
Atomics.compareExchange()
Сохраняет представленное значение в указанную позицию массива, если оно эквивалентно представленному значению. Возвращает предыдущее значение.
Atomics.exchange()
Сохраняет представленное значение в указанную позицию массива. Возвращает предыдущее значение.
Atomics.load()
Возвращает значение из указаной позиции массива.
Atomics.or()
Вычисляет побитовое OR в указанной позиции массивая. Возвращает предыдущее значение в этой позиции.
Atomics.store()
Сохраняет представленное значение в указанную позицию массива. Возвращает значение.
Atomics.sub()
Вычитает представленное значение из текущего по указанной позиции в массиве. Возвращает предыдущее значение в этой позиции.
Atomics.xor()
Вычисляет побитовое XOR в указанной позиции массива. Возвращает предыдущее значение в этой позиции.

Ожидание и пробуждение

wait() и wake() методы моделируются на основе futexes ("fast user-space mutex" - быстрый мьютекс пользовательского пространства) Linux и предоставляют собой способы ожидания момента, когда определенное состояние не станет true, и обычно используется как блокирующие конструкции.

Atomics.wait()

Проверяет, содержится в указанной позиции массива все еще представленное значение и спит в ожидании или тайм-аут. Возвращает "ok", "not-equal" или "timed-out". Если ожидание не разрешено в вызывающем агенете, тогда выбросит ошибку исключения (большинство браузеров не разрешают wait() в главном потоке барузера).

Atomics.wake()
Пробуждает некоторых агентов, которые спят в очереди ожидания в указанной позиции массива. Возвращает количество агентов, которые были разбужены.
Atomics.isLockFree(size)

Оптимизационный примитив, который может быть использован для определения использовать ли блокирующие операции или атомарные. Возвращает true, если атомарные операции над массивaми с указанным размерами элеменатов будут выполнены с использованием аппаратных атомарных опреаций (как противоположность блокирующим). Только для специалистов.

Спецификации

Specification Status Comment
ECMAScript Latest Draft (ECMA-262)
Определение 'Atomics' в этой спецификации.
Живой стандарт Initial definition in ES2017.
ECMAScript 2017 (ECMA-262)
Определение 'Atomics' в этой спецификации.
Стандарт  

Поддержка браузерами

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support Нет [2] 55 (55) [1] Нет Нет Нет
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support Нет Нет 55.0 (55) [1] Нет Нет Нет

[1] In Firefox version 46 until version 54, this feature is disabled by a preference setting. In about:config, set javascript.options.shared_memory to true

[2] The implementation is under development and needs these runtime flags: --js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer

Похожие заметки

До SpiderMonkey 48 (Firefox 48 / Thunderbird 48 / SeaMonkey 2.45), финальные имена API и сематика не были еще реализованы. Изменения между Firefox v. 46 и v. 48:

  • Методы Atomics.futexWakeOrRequeue() и Atomics.fence() полностью удалены (баг 1259544 и баг 1225028).
  • Методы Atomics.wait() и Atomics.wake() были назвны Atomics.futexWait() и Atomics.futexWake() (баг 1260910). Заметка: старые имена были удалены в версии 49 и младше (баг 1262062).
  • Свойства Atomics.OK, Atomics.TIMEDOUT, Atomics.NOTEQUAL были удалены. Atomics.wait() метод теперь возвращает строки "ok", "timed-out" и "not-equal" (баг 1260835).
  • Параметр count метода Atomics.wake() изменился: теперь он по умолчанию равен +Infinity, а не 0 (баг 1253350).

Смотри также

Метки документа и участники

 Внесли вклад в эту страницу: Exseption, curdwithraisins
 Обновлялась последний раз: Exseption,