Объект Atomics предоставляет статические методы для выполнения атомарных операций над SharedArrayBuffer. Эти операции гарантированно завершаются без прерываний, предотвращая гонки данных в конкурентных многопоточных окружениях (например, между главным потоком и Web Workers).
Арифметические и побитовые операции — все изменяют значение по заданному индексу и возвращают старое значение:
Atomics.add(typedArray, index, value) — сложениеAtomics.sub(typedArray, index, value) — вычитаниеAtomics.and(typedArray, index, value) — побитовое ИAtomics.or(typedArray, index, value) — побитовое ИЛИAtomics.xor(typedArray, index, value) — побитовое исключающее ИЛИОперации чтения и записи:
Atomics.load(typedArray, index) — атомарно читает значениеAtomics.store(typedArray, index, value) — атомарно записывает значениеУсловное обновление:
Atomics.compareExchange(typedArray, index, expectedValue, replacementValue) — заменяет значение только если оно совпадает с ожидаемым; возвращает старое значениеСинхронизация (координация потоков):
Atomics.wait(typedArray, index, value) — блокирует текущий поток до изменения значения по индексуAtomics.notify(typedArray, index, count) — пробуждает потоки, ожидающие на заданном индексеconst sab = new SharedArrayBuffer(4);
const view = new Int32Array(sab);
Atomics.store(view, 0, 42); // безопасно записываем
const val = Atomics.load(view, 0); // безопасно читаем → 42
Без Atomics одновременные чтения и записи в общую память могут дать непредсказуемые результаты. Atomics гарантирует согласованность данных и безопасную синхронизацию потоков между воркерами.
Метод Atomics.add() возвращает новое значение после завершения операции сложения.
Новый — ещё не проверен сообществом
Вы