더북(TheBook)

5.3.5 원자성을 보장하는 연산

원자성을 보장하는 연산(atomic operation)이란 쪼갤 수 없는 연산을 말한다.

i += 1 같은 단순한 연산이라 해도 최소 세 단계를 거친다.

1. 메모리에서 값을 읽는다.

2. 값을 1 증가시킨다.

3. 새로운 값을 메모리에 다시 쓴다.

고루틴 여러 개를 동시에 실행하면 CPU는 각 고루틴을 시분할하여 번갈아 실행하는 방식으로 병행 처리를 한다. 즉, i += 1 같은 단순한 연산을 처리하는 도중에도 CPU는 해당 연산을 잠시 중단한 후 다른 고루틴을 수행할 수 있고, 이 과정에서 동기화 문제가 발생할 수 있다.

sync/atomic 패키지가 제공하는 함수를 사용하면 CPU에서 시분할을 하지 않고 한 번에 처리하도록 제어할 수 있다.

표 5-1에 sync/atomic 패키지가 제공하는 함수를 정리했다.

표 5-1 sync/atomic 패키지가 제공하는 함수

함수

설명

AddT

특정 포인터 변수에 값을 더함

CompareAndSwapT

특정 포인터 변수의 값을 주어진 값과 비교하여 같으면 새로운 값으로 대체함

LoadT

특정 포인터 변수의 값을 가져옴

StoreT

특정 포인터 변수에 값을 저장함

SwapT

특정 포인터 변수에 새로운 값을 저장하고 이전 값을 가져옴

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.