Raku의 atomic-fetch-add — 더하고 이전 값 돌려받기

Raku의 atomic-fetch-add — 더하고 이전 값 돌려받기

공유 카운터에 값을 더해야 하는데, 더하기 전의 값을 정확히 알아야 한다면 atomic-fetch-add를 써요. 네이티브 정수에 원자적 덧셈(atomic addition)을 수행하고, 덧셈을 하기 전에 본 값을 돌려줘요.

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

이 연산은 하드웨어가 제공하는 원자적 연산으로 수행돼요. 연산 자체가 원자적이기 때문에 락(lock)을 걸지 않고도 안전하게 쓸 수 있어요. 반환값은 덧셈을 수행하기 전에 본 값이고, 넘침(overflow)은 조용히 감싸져요(wrap).

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

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

본문

  • atomicint 값에 $value를 원자적으로 더하고, 덧셈 전의 값을 돌려줘요.
  • 하드웨어 원자적 연산 덕분에 락 없이 스레드 안전해요.
  • 이름의 fetch-add가 말해주듯, '값을 읽은 뒤 더하는' 순서예요.
  • 64비트로 못 풀 정도로 큰 값은 예외, atomicint 범위 초과 값은 덧셈 전에 조용히 잘려요.