멀티코어와 동기화
C11의 _Atomic이나 C++11의 std::atomic에서 메모리 오더(memory order)를 지정할 수 있게 되어 있는 이유로 올바른 것은?
- A아토믹 변수를 메모리의 어디에 둘지 지정하기 위해
- B필요한 순서 보장만 선택함으로써 불필요한 배리어를 피하고 성능을 유지할 수 있기 때문
- C스레드를 실행하는 순서를 미리 정해 두기 위해
정답과 해설 보기
정답: B. 필요한 순서 보장만 선택함으로써 불필요한 배리어를 피하고 성능을 유지할 수 있기 때문
아토믹 변수의 연산은 기본적으로 순차 일관성(memory_order_seq_cst)으로, 가장 이해하기 쉬운 대신 배리어의 부담이 커집니다. 단순한 카운터라면 불가분이기만 하면 되므로 relaxed, 데이터를 주고받는 플래그라면 acquire와 release로 충분합니다. 컴파일러는 지정에 맞춰 CPU의 메모리 모델에 필요한 최소한의 명령을 생성합니다.
- A. 배치 장소의 지정이 아닙니다.
- B. 맞습니다. 기본값은 가장 강한 순차 일관성입니다.
- C. 스레드의 실행 순서를 정하는 것이 아닙니다.