멀티코어와 동기화

읽기-쓰기 락(reader-writer lock)의 특징으로 올바른 것은?

  1. A쓰는 스레드는 몇 개든 동시에 들어갈 수 있지만, 읽는 스레드는 1개뿐이다
  2. B읽기만 하는 스레드는 동시에 몇 개든 들어갈 수 있지만, 쓰는 스레드는 1개뿐이며 그때는 다른 누구도 들어갈 수 없다
  3. C읽을 때도 쓸 때도 반드시 1개의 스레드만 들어갈 수 있다
정답과 해설 보기

정답: B. 읽기만 하는 스레드는 동시에 몇 개든 들어갈 수 있지만, 쓰는 스레드는 1개뿐이며 그때는 다른 누구도 들어갈 수 없다

읽기만 한다면 동시에 수행해도 데이터가 깨지지 않으므로, 읽기-쓰기 락은 읽는 쪽끼리의 동시 실행을 허용하고 쓰는 쪽만 배타적으로 만듭니다. 설정 테이블처럼 읽히는 일이 많고 갱신이 드문 데이터에서 병렬성을 높일 수 있습니다. 다만 읽는 쪽이 끊이지 않으면 쓰는 쪽이 언제까지고 들어가지 못하는 경우가 있어, 구현에 따라서는 쓰는 쪽을 우선하는 궁리가 되어 있습니다.

  • A. 반대입니다.
  • B. 맞습니다. 읽는 일이 많은 데이터에 적합합니다.
  • C. 그것은 일반적인 락(뮤텍스)입니다.
이 분야 연습하기 분야로 돌아가기

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

  1. 카운터가 있는 세마포어(counting semaphore)의 사용법으로 가장 적절한 것은?
  2. 캐시 일관성(coherency)과 메모리 일관성 모델(consistency model)의 차이로 올바른 것은?
  3. 하드웨어 트랜잭셔널 메모리(hardware transactional memory)의 개념으로 올바른 것은?
  4. 조건 변수(condition variable)로 「큐가 비어 있지 않게 될 때까지 기다린다」고 할 때, 대기에서 깨어난 뒤 조건을 if문이 아니라 while문으로 다시 확인하는 이유로 올바른 것은?
  5. 두 코어가 각자의 캐시에 변수 x의 복사본을 가지고 있다. 코어 0이 x에 쓴 뒤 코어 1이 x를 읽을 때, 캐시 일관성(cache coherency) 메커니즘이 없다면 일어날 수 있는 문제는 무엇인가?

이 분야의 비교