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)         // ERROR "atomic 값에 대한 직접 대입"
 _, x = 10, atomic.AddUint64(&x, 1)  // ERROR "atomic 값에 대한 직접 대입"
 x, _ = atomic.AddUint64(&x, 1), 10  // ERROR "atomic 값에 대한 직접 대입"
}