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

JavaScript Atomics.isLockFree() 메서드 완벽 정리 - 원자적 연산과 락의 사용 기준

JavaScript의 Atomics 객체는 여러 스레드가 공유 메모리에 안전하게 접근할 수 있도록 원자적(atomic) 연산을 제공하는 내장 객체입니다. add, sub, and, or, xor, load, store 같은 연산들이 정적(static) 메서드 형태로 제공되며, 이러한 메서드들은 주로 SharedArrayBuffer 객체와 함께 사용됩니다.

Atomics.isLockFree()란?

Atomics.isLockFree() 메서드는 주어진 바이트 크기에 대해 하드웨어 수준의 원자적 연산을 사용할 수 있는지, 아니면 소프트웨어 락(lock)을 사용해야 하는지를 판별하는 데 활용됩니다.

쉽게 말해, 해당 크기의 데이터에 대해 락 없이 원자적 연산이 가능하면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 일반적으로 대부분의 플랫폼에서 4바이트 크기는 true를 반환하지만, 그 외의 크기는 환경에 따라 결과가 달라질 수 있습니다.

문법(Syntax)

Atomics.isLockFree(size)
  • size: 검사할 바이트 단위의 크기를 나타내는 숫자 값입니다.

예제(Example)

아래 예제에서는 7바이트와 8바이트 크기에 대해 락 프리(lock-free) 연산이 가능한지 확인합니다.

<html>
<head>
   <title>JavaScript Example</title>
</head>
<body>
   <script>
      document.write(Atomics.isLockFree(7));
      document.write("<br>");
      document.write(" "+Atomics.isLockFree(8));
   </script>
</body>
</html>

실행 결과(Output)

false
false

결과 해석

위 실행 결과에서 볼 수 있듯이, 7바이트와 8바이트 크기 모두 false가 반환되었습니다. 이는 해당 크기에 대해서는 하드웨어 차원의 원자적 연산이 지원되지 않으며, 동기화를 위해 락 메커니즘이 필요함을 의미합니다. 반대로 4바이트처럼 일반적으로 지원되는 크기를 전달하면 true가 반환되는 경우가 많습니다.