멀티코어와 동기화

카운터가 있는 세마포어(counting semaphore)의 사용법으로 가장 적절한 것은?

  1. A하나의 변수 값을 반드시 2배로 만든다
  2. B프로그램의 실행을 모두 하나의 스레드로 모은다
  3. C동시에 사용할 수 있는 수가 정해진 자원(예: 연결이 4개까지)을 4개의 스레드까지 동시에 사용하게 한다
정답과 해설 보기

정답: C. 동시에 사용할 수 있는 수가 정해진 자원(예: 연결이 4개까지)을 4개의 스레드까지 동시에 사용하게 한다

세마포어는 남은 수를 나타내는 카운터를 가지며, 사용하기 전에 1 줄이고(0이면 늘어날 때까지 대기), 사용이 끝나면 1 늘립니다. 초기값을 4로 하면 동시에 4개까지의 스레드가 자원을 사용할 수 있습니다. 초기값을 1로 하면 락처럼 배타 제어에 사용할 수 있습니다. 기다리는 스레드는 재워 두었다가 OS가 깨우는 것이 일반적입니다.

  • A. 값을 계산하는 것이 아닙니다.
  • B. 병렬 실행을 제한하는 것이지만, 하나로 모으는 것은 아닙니다.
  • C. 맞습니다. 카운터로 남은 수를 관리합니다.
이 분야 연습하기 분야로 돌아가기

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

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

이 분야의 비교