--- 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')}} |
{{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:
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)}}).