Raku의 atomic-fetch-dec — 하드웨어 원자적 감소
Raku의 atomic-fetch-dec — 하드웨어 원자적 감소
여러 스레드가 같은 정수를 동시에 바꿀 때, 중간값을 읽어버리는 경합(race condition)이 걱정되죠. atomic-fetch-dec은 네이티브 정수에 원자적 감소(atomic decrement)를 수행해요. 이름의 fetch가 말해주듯, 감소시키기 전의 값을 돌려받아요.
multi atomic-fetch-dec(atomicint $ is rw)
이 연산은 하드웨어가 제공하는 원자적 연산으로 수행돼요. 연산 자체가 원자적이기 때문에 락(lock)을 걸지 않고도 안전하게 쓰는 게 가능해요. 반환값은 감소시키기 전에 본 값이고, 넘침(overflow)은 조용히 감싸져요(wrap).
본문
atomicint 타입의 값을 인자로 받아 원자적으로 1 감소시켜요. 감소 전 값을 돌려주므로, '이전 값을 확인한 뒤 감소'해야 하는 코드를 스레드 안전하게 만들 때 유용해요. 락 없이도 안전하니 경합 걱정을 줄일 수 있어요.