멀티코어와 동기화
락프리(lock-free) 알고리즘의 성질로 올바른 것은?
- A어느 스레드가 도중에 멈추더라도, 다른 스레드 중 적어도 하나는 처리를 진행할 수 있다
- B모든 스레드가 반드시 정해진 횟수의 단계로 처리를 끝낸다
- C아토믹 명령을 일절 사용하지 않고 공유 데이터를 갱신한다
정답과 해설 보기
정답: A. 어느 스레드가 도중에 멈추더라도, 다른 스레드 중 적어도 하나는 처리를 진행할 수 있다
락을 사용하면, 락을 가진 스레드가 인터럽트나 낮은 우선순위로 멈출 때 다른 모든 스레드가 기다리게 됩니다. 락프리 알고리즘은 CAS 등으로 공유 데이터를 직접 갱신하며, 어떤 스레드가 실패하여 재시도하는 것은 다른 누군가가 성공했을 때뿐인 형태로 만듭니다. 그래서 전체적으로는 항상 어느 스레드인가가 진행합니다. 다만 올바르게 만들기는 어렵고 ABA 문제 등에도 주의가 필요합니다.
- A. 맞습니다. 락을 가진 채 멈추는 스레드의 문제가 없습니다.
- B. 그것은 더 강한 웨이트프리(wait-free)의 성질입니다.
- C. CAS 등의 아토믹 명령을 사용하여 만듭니다.