JavaScript Atomics.store() 메서드란?
Atomics.store()는 JavaScript에 내장된 메서드로, 배열의 특정 위치에 지정한 값을 저장하는 데 사용됩니다. 이 메서드는 정수형 타입 배열(Integer Typed Array), 인덱스, 저장할 값 총 세 개의 인수를 받으며, 저장이 완료되면 해당 값을 반환합니다.
Atomics 객체는 여러 스레드가 동시에 같은 메모리에 접근할 때 발생할 수 있는 경쟁 상태(race condition)를 방지하기 위해 원자적(atomic) 연산을 제공합니다. 따라서 멀티스레드 환경에서 안전하게 데이터를 읽고 쓸 수 있습니다.
문법(Syntax)
Atomics.store(typedArray, index, value);
매개변수(Parameters)
- typedArray — 수정하려는 공유 정수형 타입 배열(Int8Array, Uint8Array, Int32Array 등)입니다.
- index — 값을 저장할 배열 내부의 위치입니다.
- value — 해당 위치에 저장하려는 숫자입니다.
사용 시 주의사항
특정 위치에 값을 저장하고 그 결과값을 즉시 반환받아야 할 때 Atomics.store()를 활용합니다.
단, Atomics는 반드시 SharedArrayBuffer(고정 길이의 일반 바이너리 데이터 버퍼) 객체와 함께 사용해야 합니다. 또한 Atomics는 생성자가 아니므로 new 연산자와 함께 사용할 수 없고, 일반 함수처럼 직접 호출할 수도 없습니다.
예제(Example)
다음 예제에서는 먼저 SharedArrayBuffer 객체를 생성합니다. 그런 다음 배열 'arr'을 만들어 인덱스 1에 초기값 '7'을 할당합니다. 이후 Atomics.store()를 사용하여 인덱스 1의 값 7을 3으로 교체하고, 교체된 새로운 값이 반환됩니다. 실제로 값이 제대로 저장되었는지 확인하기 위해 최신 상태의 배열 값을 읽어오는 Atomics.load() 메서드를 함께 사용하여 결과를 출력합니다.
<html>
<body>
<script>
var buf = new SharedArrayBuffer(25);
var arr = new Uint8Array(buf);
arr[1] = 7;
var res = Atomics.store(arr, 1, 3)
document.write(res);
document.write("</br>");
document.write(Atomics.load(arr,1));
</script>
</body>
</html>출력 결과(Output)
3 3
첫 번째 출력인 '3'은 Atomics.store()가 반환한 저장된 값이며, 두 번째 출력인 '3'은 Atomics.load()로 다시 읽어온 배열의 최신 값입니다. 이를 통해 값이 성공적으로 교체되었음을 확인할 수 있습니다.