--- title: Atomics slug: Web/JavaScript/Reference/Global_Objects/Atomics translation_of: Web/JavaScript/Reference/Global_Objects/Atomics ---
Atomics предоставляет атомарные операции как статические методы. Используется вместе с объектом {{jsxref("SharedArrayBuffer")}}. Атомарные операции установлены в модуле Atomics. В отличие от других глобальных объектов, Atomics не является конструктором. Его нельзя использовать вместе с оператором new или вызывать объект Atomics как функцию. Все свойства и методы Atomics статические (как у объекта {{jsxref("Math")}}, к примеру).
Atomics[Symbol.toStringTag]Когда память разделена, несколько потоков могут читать и записывать одни и те же данные в память. Атомарные операции гарантируют, что ожидаемые значения будут записаны и прочитаны, а операции завершены, прежде чем следующая операция начнёт свою работу, и они не будут прерваны.
wait() и wake() методы моделируются на основе futexes ("fast user-space mutex" - быстрый мьютекс пользовательского пространства) Linux и предоставляют собой способы ожидания момента, когда определённое состояние не станет true, и обычно используется как блокирующие конструкции.
Проверяет, содержится в указанной позиции массива все ещё представленное значение и спит в ожидании или тайм-аут. Возвращает "ok", "not-equal" или "timed-out". Если ожидание не разрешено в вызывающем агенте, тогда выбросит ошибку исключения (большинство браузеров не разрешают wait() в главном потоке браузера).
Оптимизационный примитив, который может быть использован для определения использовать ли блокирующие операции или атомарные. Возвращает true, если атомарные операции над массивами с указанным размерами элементов будут выполнены с использованием аппаратных атомарных операций (как противоположность блокирующим). Только для специалистов.
| Specification | Status | Comment |
|---|---|---|
| {{SpecName('ESDraft', '#sec-atomics-object', 'Atomics')}} | {{Spec2('ESDraft')}} | Initial definition in ES2017. |
| {{SpecName('ES8', '#sec-atomics-object', 'Atomics')}} | {{Spec2('ES8')}} |
{{Compat}}
До SpiderMonkey 48 {{geckoRelease(48)}}, финальные имена API и семантика не были ещё реализованы. Изменения между Firefox v. 46 и v. 48:
Atomics.futexWakeOrRequeue() и Atomics.fence() полностью удалены ({{bug(1259544)}} и {{bug(1225028)}}).Atomics.futexWait() и Atomics.futexWake() ({{bug(1260910)}}). Примечание: старые имена были удалены в версии 49 и младше ({{bug(1262062)}}).Atomics.OK, Atomics.TIMEDOUT, Atomics.NOTEQUAL были удалены. {{jsxref("Atomics.wait()")}} метод теперь возвращает строки "ok", "timed-out" и "not-equal" ({{bug(1260835)}}).Параметр count метода {{jsxref("Atomics.wake()")}} изменился: теперь он по умолчанию равен +Infinity, а не 0 ({{bug(1253350)}}).