멀티코어와 동기화
데드락(deadlock)의 예로 올바른 것은?
- A스레드 1이 락 A를 가진 채 락 B를 기다리고, 스레드 2가 락 B를 가진 채 락 A를 기다리고 있다
- B두 스레드가 같은 변수를 동기화 없이 갱신하여 값이 깨진다
- C하나의 스레드가 락을 잡고 곧바로 해제한다
정답과 해설 보기
정답: A. 스레드 1이 락 A를 가진 채 락 B를 기다리고, 스레드 2가 락 B를 가진 채 락 A를 기다리고 있다
데드락은 여러 스레드가 각자 자원을 가진 채 다른 스레드가 가진 자원을 서로 기다려서, 아무도 앞으로 나아가지 못하게 되는 상태입니다. 예에서는 스레드 1은 B가 풀리기를, 스레드 2는 A가 풀리기를 기다리지만, 어느 쪽도 자신의 락을 놓지 않으므로 영원히 멈춥니다. CPU를 사용하지 않고 멈추기 때문에, 외부에서 보면 처리가 멈춰 버린 것처럼 보입니다.
- A. 맞습니다. 서로 상대를 계속 기다리며 나아가지 못합니다.
- B. 그것은 데이터 레이스입니다.
- C. 문제없는 평범한 사용법입니다.