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)에 너무 크면 예외를 던져요. 그 외에 $value가 atomicint을 넘치게 하면, 덧셈을 수행하기 전에 조용히 잘려요(truncate).
본문
atomicint값에$value를 원자적으로 더하고, 덧셈 전의 값을 돌려줘요.- 하드웨어 원자적 연산 덕분에 락 없이 스레드 안전해요.
- 이름의
fetch-add가 말해주듯, '값을 읽은 뒤 더하는' 순서예요. - 64비트로 못 풀 정도로 큰 값은 예외,
atomicint범위 초과 값은 덧셈 전에 조용히 잘려요.