Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript Atomics.or() 함수 완벽 정리 – 문법, 동작 원리, 예제 코드

JavaScript의 Atomics 객체는 add(덧셈), sub(뺄셈), and, or, xor, load, store 등과 같은 원자적(atomic) 연산을 정적 메서드 형태로 제공하는 내장 객체입니다. 이 메서드들은 SharedArrayBuffer 객체와 함께 사용되며, 여러 스레드가 공유 메모리에 동시에 접근할 때 발생할 수 있는 데이터 경합(race condition) 문제를 방지하는 역할을 합니다.

Atomics.or() 함수는 배열의 특정 위치(index)를 나타내는 값을 인자로 받아, 해당 위치에 저장된 값과 지정한 값에 대해 비트 OR(bitwise OR) 연산을 수행합니다. 연산 결과는 해당 위치에 다시 저장되며, 함수는 연산 이전의 기존 값(old value)을 반환합니다.

문법(Syntax)

Atomics.or(data, index, value)

매개변수 설명

  • data: SharedArrayBuffer를 기반으로 생성된 Int8Array, Uint8Array 등의 타입 배열(TypedArray)
  • index: 비트 OR 연산을 수행할 배열의 위치
  • value: 비트 OR 연산에 사용할 숫자 값

예제 1

<html>
<head>
    <title>JavaScript Example</title>
</head>
<body>
    <script type="text/javascript">
        var arrayBuffer = new SharedArrayBuffer(16);
        var data = new Uint8Array(arrayBuffer);
        data[0] = 20;
        document.write(Atomics.or(data, 0, 30));
        document.write("<br>");
        document.write(Atomics.or(data, 0));
    </script>
</body>
</html>

실행 결과

20
30

위 예제에서 data[0]의 초기값은 20입니다. 첫 번째 Atomics.or(data, 0, 30) 호출은 기존 값인 20을 반환하고, 20(10100₂)과 30(11110₂)의 비트 OR 연산 결과인 30을 해당 위치에 저장합니다. 두 번째 호출에서는 이미 저장된 값인 30이 그대로 반환됩니다.

예제 2

<html>
<head>
    <title>JavaScript Example</title>
</head>
<body>
    <script type="text/javascript">
        var arrayBuffer = new SharedArrayBuffer(16);
        var data = new Uint8Array(arrayBuffer);
        data[0] = 2;
        document.write(Atomics.or(data, 0, 7));
        document.write("<br>");
        document.write(Atomics.or(data, 0));
    </script>
</body>
</html>

실행 결과

2
7

이번 예제에서는 data[0]의 초기값이 2입니다. 첫 번째 호출은 기존 값인 2를 반환하며, 2(010₂)와 7(111₂)의 비트 OR 연산 결과인 7이 저장됩니다. 이후 두 번째 호출에서는 변경된 값인 7이 반환되는 것을 확인할 수 있습니다.