Raku의 atomic-fetch-sub — 하드웨어 원자적 뺄셈

Raku의 atomic-fetch-sub — 하드웨어 원자적 뺄셈

atomic-fetch-inc가 1을 더하는 원자적 연산이라면, atomic-fetch-sub은 네이티브 정수에 원자적 뺄셈을 수행해요. 역시 증가 전의 값을 돌려받는 방식과 같은 흐름이에요.

multi atomic-fetch-sub(atomicint $ is rw, int $value)
multi atomic-fetch-sub(atomicint $ is rw, Int() $value)

여러 스레드가 공유하는 카운터에서 값을 빼야 하는데 중간값 경합이 걱정될 때 쓸 수 있어요. 하드웨어 제공 원자적 연산으로 동작하므로 락을 걸지 않고도 안전해요. 반환값은 뺄셈을 수행하기 전에 본 값이고, 언더플로(underflow)는 조용히 감싸져요.

주의할 점이 몇 가지 있어요. $value가 64비트 정수로 풀기(unbox)에 너무 크면 예외가 나요. 그리고 $valueatomicint의 범위를 넘어 넘치면, 뺄셈을 하기 전에 조용히 잘려요(truncate).

출처: Raku 공식 문서 — atomic-fetch-sub

본문

  • 첫 번째 시그너처는 int $value를, 두 번째는 Int() 강제 변환되는 값을 받아요.
  • 락 없이 스레드 안전하게 원자적 뺄셈을 수행하고, 뺄셈 전 값을 돌려줘요.
  • 값이 너무 크면 예외, 범위 초과 시 조용히 잘리니 입력 크기에 주의하세요.