Atomics
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since декабрь 2021 г..
* Some parts of this feature may have varying levels of support.
Объект 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 и notify
wait() и wake() методы моделируются на основе futexes ("fast user-space mutex" - быстрый мьютекс пользовательского пространства) Linux и предоставляют собой способы ожидания момента, когда определённое состояние не станет true, и обычно используется как блокирующие конструкции.
Atomics.wait()-
Проверяет, содержится в указанной позиции массива все ещё представленное значение и спит в ожидании или тайм-аут. Возвращает
"ok","not-equal"или"timed-out". Если ожидание не разрешено в вызывающем агенте, тогда выбросит ошибку исключения (большинство браузеров не разрешаютwait()в главном потоке браузера). Atomics.wake()-
Пробуждает некоторых агентов, которые спят в очереди ожидания в указанной позиции массива. Возвращает количество агентов, которые были разбужены.
Atomics.isLockFree(size)-
Оптимизационный примитив, который может быть использован для определения использовать ли блокирующие операции или атомарные. Возвращает
true, если атомарные операции над массивами с указанным размерами элементов будут выполнены с использованием аппаратных атомарных операций (как противоположность блокирующим). Только для специалистов.
Спецификации
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-atomics-object> |