멀티코어와 동기화

락프리(lock-free) 알고리즘의 성질로 올바른 것은?

  1. A어느 스레드가 도중에 멈추더라도, 다른 스레드 중 적어도 하나는 처리를 진행할 수 있다
  2. B모든 스레드가 반드시 정해진 횟수의 단계로 처리를 끝낸다
  3. C아토믹 명령을 일절 사용하지 않고 공유 데이터를 갱신한다
정답과 해설 보기

정답: A. 어느 스레드가 도중에 멈추더라도, 다른 스레드 중 적어도 하나는 처리를 진행할 수 있다

락을 사용하면, 락을 가진 스레드가 인터럽트나 낮은 우선순위로 멈출 때 다른 모든 스레드가 기다리게 됩니다. 락프리 알고리즘은 CAS 등으로 공유 데이터를 직접 갱신하며, 어떤 스레드가 실패하여 재시도하는 것은 다른 누군가가 성공했을 때뿐인 형태로 만듭니다. 그래서 전체적으로는 항상 어느 스레드인가가 진행합니다. 다만 올바르게 만들기는 어렵고 ABA 문제 등에도 주의가 필요합니다.

  • A. 맞습니다. 락을 가진 채 멈추는 스레드의 문제가 없습니다.
  • B. 그것은 더 강한 웨이트프리(wait-free)의 성질입니다.
  • C. CAS 등의 아토믹 명령을 사용하여 만듭니다.
이 분야 연습하기 분야로 돌아가기

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

  1. 임계 구역(critical section)에 대한 설명으로 올바른 것은?
  2. 병렬 프로그램에서 사용되는 배리어 동기화(barrier synchronization)에 대한 설명으로 올바른 것은?
  3. 64개의 코어가 하나의 공유 카운터를 아토믹 명령으로 동시에 계속 갱신하면, 코어를 늘려도 빨라지지 않는다. 주된 이유는?
  4. NUMA(Non-Uniform Memory Access, 불균일 메모리 접근) 시스템에 대한 설명으로 올바른 것은?
  5. Linux의 NUMA 시스템에서 자주 사용되는 퍼스트 터치(first-touch) 정책(처음 페이지에 쓴 스레드가 동작 중인 노드의 메모리에 그 페이지를 배치)에서 주의해야 할 점으로 올바른 것은?

이 분야의 비교