멀티코어와 동기화

커다란 자료구조 전체를 하나의 락으로 보호하는 「거친 단위(coarse-grained) 락」과, 부분별로 다른 락으로 보호하는 「세밀한 단위(fine-grained) 락」을 비교한 설명으로 올바른 것은?

  1. A거친 단위 락이 언제나 병렬성이 높다
  2. B세밀한 단위 락으로 하면 락의 수가 줄어든다
  3. C세밀한 단위는 여러 스레드가 서로 다른 부분을 동시에 사용할 수 있어 병렬성이 높지만, 설계가 복잡해지고 데드락의 위험도 늘어난다
정답과 해설 보기

정답: C. 세밀한 단위는 여러 스레드가 서로 다른 부분을 동시에 사용할 수 있어 병렬성이 높지만, 설계가 복잡해지고 데드락의 위험도 늘어난다

거친 단위 락은 단순하고 실수하기 어려운 반면, 관계없는 부분을 사용하는 스레드끼리도 서로 기다리게 되어 코어가 늘어도 빨라지기 어렵습니다. 해시 테이블의 버킷마다 락을 나누는 것과 같은 세밀한 단위로 하면 다른 부분은 동시에 조작할 수 있습니다. 다만 여러 락을 잡는 상황이 늘어나, 잡는 순서의 관리나 락 자체의 부담이 문제가 됩니다.

  • A. 거친 락에서는 한 번에 하나의 스레드만 들어갈 수 있습니다.
  • B. 락의 수는 늘어납니다.
  • C. 맞습니다. 단순함과 병렬성의 균형을 고려하여 선택합니다.
이 분야 연습하기 분야로 돌아가기

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

  1. 락프리(lock-free) 알고리즘의 성질로 올바른 것은?
  2. 임계 구역(critical section)에 대한 설명으로 올바른 것은?
  3. 병렬 프로그램에서 사용되는 배리어 동기화(barrier synchronization)에 대한 설명으로 올바른 것은?
  4. 64개의 코어가 하나의 공유 카운터를 아토믹 명령으로 동시에 계속 갱신하면, 코어를 늘려도 빨라지지 않는다. 주된 이유는?
  5. NUMA(Non-Uniform Memory Access, 불균일 메모리 접근) 시스템에 대한 설명으로 올바른 것은?

이 분야의 비교