멀티코어와 동기화
스핀락이 적합하지 않은 상황으로 가장 적절한 것은?
- A락을 잡고 있는 시간이 길어, 기다리는 스레드가 CPU를 헛되이 계속 사용하게 되는 상황
- B락을 잡고 있는 시간이 수십 나노초로 매우 짧은 상황
- COS 커널 안에서 잠들 수 없는 처리 상황
정답과 해설 보기
정답: A. 락을 잡고 있는 시간이 길어, 기다리는 스레드가 CPU를 헛되이 계속 사용하게 되는 상황
스핀락으로 기다리는 스레드는 락이 풀릴 때까지 CPU를 계속 사용합니다. 락을 잡고 있는 시간이 길면 그 CPU 시간이 모두 낭비되고, 다른 스레드의 실행도 방해합니다. 특히 코어가 하나뿐이면 락을 잡고 있는 스레드가 실행되지 않는 한 풀리지 않으므로, 대기는 타임 슬라이스가 끝날 때까지 이어집니다. 긴 대기에는 잠들어서 기다리는 뮤텍스를 사용하며, 짧은 시간만 돌다가 잠드는 방식도 있습니다.
- A. 맞습니다. 그 경우에는 잠들어서 기다리는 락이 더 효율적입니다.
- B. 짧은 경우야말로 스핀락이 적합합니다.
- C. 잠들 수 없는 상황에서는 스핀락이 사용됩니다.