x = atomic.AddUint64(&x, 1) 형식의 대입 구문을 보고합니다.
이러한 연산은 atomic이 아니며 sync/atomic API의 흔한 잘못된 사용 사례입니다. 이를 atomic으로 만들기 위해서는 직접 호출을 사용할 수 있도록 대입을 제거해야 합니다. atomic.AddUint64(&x, 1) 이 경우 x의 값은 atomic 방식에 따라 주소로 업데이트됩니다.
예:
import (
"sync/atomic"
)
type Counter uint64
func AtomicTests() {
x := uint64(1)
x = atomic.AddUint64(&x, 1) // 오류 "atomic 값에 직접 대입"
_, x = 10, atomic.AddUint64(&x, 1) // 오류 "atomic 값에 직접 대입"
x, _ = atomic.AddUint64(&x, 1), 10 // 오류 "atomic 값에 직접 대입"
}