Raku의 atomic-dec-fetch — 감소시키고 값 읽기

Raku의 atomic-dec-fetch — 감소시키고 값 읽기

공유 카운터를 1씩 줄여야 하는데, 줄이고 난 뒤의 값을 정확히 봐야 한다면 atomic-dec-fetch를 써요. 네이티브 정수에 원자적 감소(atomic decrement)를 수행하고, 감소된 결과값을 돌려줘요.

multi atomic-dec-fetch(atomicint $ is rw)

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

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

본문

  • atomicint 값을 1만큼 원자적으로 감소시키고, 감소 후의 값을 돌려줘요.
  • 하드웨어 원자적 연산 덕분에 락 없이 스레드 안전해요.
  • 이름의 dec-fetch가 말해주듯, '감소한 뒤 값을 읽는' 순서예요. 반대로 '값을 읽고 감소'는 atomic-fetch-dec 계열이에요.
  • 넘침은 조용히 감싸지므로, 카운터가 극단적으로 클 땐 동작을 확인해 둘 필요가 있어요.