@atomicRmw — 값을 원자적으로 바꾸고 예전 값을 돌려받기

@atomicRmw — 값을 원자적으로 바꾸고 예전 값을 돌려받기

값을 바꾸는 일은 보통은 단순하지만, 여러 스레드가 같은 메모리를 건드리는 상황에서는 이야기가 달라져요. 그 사이에 다른 쪽이 값을 바꿨다면 결과가 꼬일 수 있거든요. @atomicRmw는 (Read-Modify-Write) 이 작업 전체를 원자적으로 처리해서, 중간에 끼어들 틈을 없애 줍니다.

출처: Zig Documentation

본문

이 내장 함수는 T를 가리키는 포인터를 역참조해 값을 원자적으로 수정하고, 수정하기 전의 값을 돌려줘요.

@atomicRmw(comptime T: type, ptr: *T, comptime op: AtomicRmwOp, operand: T, comptime ordering: AtomicOrder) T

T는 포인터, bool, 부동소수점(float), 정수(integer), enum, 또는 packed struct여야 해요.

AtomicOrder@import("std").lang.AtomicOrder로 찾을 수 있고, AtomicRmwOp@import("std").lang.AtomicRmwOp로 찾을 수 있어요.

더 알아보기

관련된 원자 연산 내장 함수들이 더 있어요: