멀티코어와 동기화

메모리 배리어(펜스) 명령의 역할로 올바른 것은?

  1. A배리어 이전의 메모리 동작이 배리어 이후의 동작보다 먼저 다른 코어에 보이는 것을 보장한다
  2. B메모리를 물리적으로 구분하여 접근을 금지한다
  3. C모든 스레드가 모일 때까지 프로그램 실행을 멈춘다
정답과 해설 보기

정답: A. 배리어 이전의 메모리 동작이 배리어 이후의 동작보다 먼저 다른 코어에 보이는 것을 보장한다

CPU는 메모리 동작의 순서를 바꾸는 경우가 있으므로, 다른 코어와 정해진 순서로 데이터를 주고받으려면 그것을 막는 지시가 필요합니다. 메모리 배리어는 그 앞의 읽기·쓰기를 모두 끝낸 뒤(다른 코어에 보이게 한 뒤) 뒤의 읽기·쓰기를 수행하게 합니다. 락의 획득이나 해제 안에도 배리어의 기능이 포함되어 있어, 락으로 보호한 변수가 올바르게 전달됩니다.

  • A. 맞습니다. 메모리 동작의 순서 변경을 막습니다.
  • B. 접근 금지는 페이지 보호 등의 메커니즘입니다.
  • C. 그것은 스레드 간 배리어 동기화입니다.
이 분야 연습하기 분야로 돌아가기

멀티코어와 동기화의 다른 문제

  1. 위 코드에서 스레드 1이 data를 준비한 뒤 flag로 알리고, 스레드 2가 flag를 확인한 뒤 data를 읽는다. 약한 메모리 일관성 모델의 CPU에서 스레드 2가 확실히 42를 읽기 위해 필요한 것으로 올바른 것은?
  2. 획득(acquire)과 해제(release)의 의미를 가진 메모리 동작에 대해 올바른 것은?
  3. C 언어에서 스레드 간에 주고받는 플래그 변수에 volatile을 붙이는 것만으로는 동기화로 불충분한 이유로 올바른 것은?
  4. C11의 _Atomic이나 C++11의 std::atomic에서 메모리 오더(memory order)를 지정할 수 있게 되어 있는 이유로 올바른 것은?
  5. 커다란 자료구조 전체를 하나의 락으로 보호하는 「거친 단위(coarse-grained) 락」과, 부분별로 다른 락으로 보호하는 「세밀한 단위(fine-grained) 락」을 비교한 설명으로 올바른 것은?

이 분야의 비교