[go] atomic 연산을 이용한 동시성 제어
동시성 프로그래밍을 할 때 공유 자원에 대한 안전한 접근을 보장하기 위해서 atomic 연산을 사용할 수 있습니다. Go 언어에서는 sync/atomic
패키지를 활용하여 이러한 연산을 수행할 수 있습니다.
atomic 패키지
sync/atomic
패키지는 원자적 연산 수행을 지원하며, 여러 고루틴이 공유 자원에 안전하게 접근할 수 있도록 도와줍니다. 이 패키지에는 많은 함수와 타입들이 포함되어 있으며, 다음과 같은 주요 함수들이 있습니다.
LoadInt32
: 32비트 정수형 변수의 값을 읽어옵니다.StoreInt32
: 32비트 정수형 변수에 값을 저장합니다.AddInt32
: 32비트 정수형 변수에 값을 더합니다.SwapInt32
: 32비트 정수형 변수의 값을 교체합니다.- …
사용 예시
다음은 sync/atomic
패키지를 사용하여 공유 변수를 안전하게 증가시키는 예시 코드입니다.
package main
import (
"fmt"
"sync/atomic"
)
func main() {
var count int32
for i := 0; i < 100; i++ {
go func() {
atomic.AddInt32(&count, 1)
}()
}
// 모든 고루틴이 실행을 마칠 때까지 대기
// ...
fmt.Println("Count:", atomic.LoadInt32(&count))
}
위의 예시에서 atomic.AddInt32
함수를 이용하여 count
변수를 안전하게 증가시켰습니다. 이를 통해 여러 고루틴이 동시에 count
변수에 안전하게 접근할 수 있도록 보장할 수 있습니다.
결론
Go의 sync/atomic
패키지를 사용하여 동시성 제어를 할 때, 공유 자원에 안전하게 접근하기 위한 원자적 연산을 수행할 수 있습니다. 이를 통해 공유 자원에 대한 안전한 접근을 보장할 수 있으며, 동시성 프로그래밍에서 발생할 수 있는 문제를 해결할 수 있습니다.