--- title: Atomics slug: Web/JavaScript/Reference/Global_Objects/Atomics translation_of: Web/JavaScript/Reference/Global_Objects/Atomics ---
{{JSRef}}
Объект Atomics предоставляет атомарные операции как статические методы. Используется вместе с объектом {{jsxref("SharedArrayBuffer")}}. 
 

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

Свойства

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

Методы

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

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

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

Wait и notify

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

{{jsxref("Atomics.wait()")}}

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

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

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

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

Specification Status Comment
{{SpecName('ESDraft', '#sec-atomics-object', 'Atomics')}} {{Spec2('ESDraft')}} Initial definition in ES2017.
{{SpecName('ES8', '#sec-atomics-object', 'Atomics')}} {{Spec2('ES8')}}  

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

{{CompatibilityTable}}

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support {{CompatNo}} [2] {{CompatGeckoDesktop("55")}} [1] {{CompatNo}} {{CompatNo}} {{CompatNo}}
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support {{CompatNo}} {{CompatNo}} {{CompatGeckoMobile("55")}} [1] {{CompatNo}} {{CompatNo}} {{CompatNo}}

[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 {{geckoRelease(48)}}, финальные имена API и семантика не были ещё реализованы. Изменения между Firefox v. 46 и v. 48:

Смотри также