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

JavaScript Atomics.and() 함수 완벽 가이드 – 비트 단위 AND 원자적 연산

JavaScript의 Atomics 객체는 add(덧셈), sub(뺄셈), and(비트 AND), or(비트 OR), xor(비트 XOR), load(읽기), store(쓰기)와 같은 원자적(atomic) 연산을 정적 메서드 형태로 제공하는 객체입니다. 이 메서드들은 SharedArrayBuffer 객체와 함께 사용되며, 여러 스레드가 동시에 동일한 메모리에 접근할 때 데이터 일관성이 깨지는 경합 조건(race condition)을 방지해 줍니다.

Atomics.and() 함수는 배열에서 연산을 수행할 위치(index)를 나타내는 값을 인자로 받습니다. 이 함수는 해당 위치에 저장된 값과 지정된 값에 대해 비트 단위 AND(bitwise AND) 연산을 수행하고, 그 결과를 다시 해당 위치에 저장한 뒤 그 자리에 있던 이전 값(old value)을 반환합니다.

구문(Syntax)

Atomics.and(typedArray, index, value)

매개변수

  • typedArray – SharedArrayBuffer를 기반으로 생성된 정수형 타입 배열(Int8Array, Uint8Array 등)
  • index – 비트 AND 연산을 수행할 배열 내 위치
  • value – AND 연산에 사용할 숫자 값

반환값

연산이 수행되기 전 해당 위치에 저장되어 있던 이전 값을 반환합니다.

예제 1

다음 예제에서는 값 7(이진수 111)이 저장된 배열 요소에 대해 Atomics.and()로 5(이진수 101)와 비트 AND 연산을 수행합니다. 연산 결과는 5(111 & 101 = 101)이며, 함수는 이전 값인 7을 반환합니다.

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

출력

7, 5

예제 2

이번에는 값 12(이진수 1100)에 대해 10(이진수 1010)과 비트 AND 연산을 수행합니다. 두 값의 AND 결과는 8(1100 & 1010 = 1000)이며, 함수는 이전 값인 12를 반환합니다.

<html>
<head>
   <title>JavaScript Example</title>
</head>
<body>
   <script type="text/javascript">
      var arrayBuffer = new SharedArrayBuffer(16);
      var data = new Uint8Array(arrayBuffer);
      data[0] = 12;
      document.write(Atomics.and(data, 0, 10));
      document.write(", " + Atomics.load(data, 0));
   </script>
</body>
</html>

출력

12, 8