더북(TheBook)

1.15 원자 조작

 

 

원자 조작(atomic operation)은 뮤텍스나 임계 영역 잠금 없이도 여러 스레드가 안전하게 접근할 수 있는 것을 의미합니다. 원자 조작은 하드웨어 기능이며, 대부분의 컴파일러는 원자 조작 기능을 쓸 수 있게 합니다.

원자 조작은 32비트나 64비트의 변수 타입에 여러 스레드가 접근할 때 한 스레드씩만 처리됨을 보장합니다. 그러나 변수 값 2~3개 이하에서만 보호해 주며, 변수를 읽거나 쓰는 방식도 몇 개 안 됩니다.

원자 조작은 대표적으로 다음과 같은 것이 있습니다.

• 원자성을 가진 값 더하기

• 원자성을 가진 값 맞바꾸기

• 원자성을 가진 값 조건부 맞바꾸기

여기서 원자성을 가진 값 더하기란 “변수에 무슨 값이 있는지는 모르지만, 그 값에 특정 값을 더하고 그 값의 결과를 얻어 온다.”라는 의미입니다. 일단 변수 선언부터 합시다.

volatile int a = 0;

이렇게 변수 선언을 한 후에 “자, 이 변수는 여러 스레드에서 언제든지 액세스한다.”라고 가정하겠습니다. 이 변수를 보호하는 잠금도 없습니다. 우리가 이 변수에 3을 더하는 연산을 할 때, 잠금이 없다면 예상치 못한 틀린 값이 들어갈 수 있음을 이미 배웠습니다.

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