7. 라이브락, 기아(starvation), 우선순위 역전, 공정성

난이도 중 해설 보기 →
문제

문제 7 — 라이브락, 기아(starvation), 우선순위 역전, 공정성

면접 질문

  1. 라이브락(livelock) 이 데드락과 어떻게 다른지 설명하라. 어떤 코드 패턴에서 라이브락이 생기는가?

  2. 기아(starvation) 란 무엇이며, 어떤 락/스케줄링 정책에서 잘 발생하는가? 공정성(fairness) 과 처리량(throughput)은 왜 트레이드오프 관계인가?

  3. 우선순위 역전(priority inversion) 이 무엇인지, 화성 탐사선 Pathfinder 사례처럼 왜 위험한지 설명하라. 해결책(우선순위 상속 등)은?

응용 시나리오

두 스레드가 자원 두 개(A, B)를 모두 필요로 한다. 데드락을 피하려고 "둘 다 못 잡으면 가진 걸 놓고 재시도"하도록 try-lock으로 짰다.

void DoWork() {
    while (true) {
        lockA.Enter();
        if (lockB.TryEnter()) {        // B를 못 잡으면
            // ... 작업 수행 ...
            lockB.Exit();
            lockA.Exit();
            return;                    // 성공
        } else {
            lockA.Exit();              // A를 놓고
            // 즉시 처음부터 재시도
        }
    }
}

두 스레드가 동시에 이 코드를 실행할 때, 둘 다 A를 잡고 → 서로 B를 못 잡고 → 둘 다 A를 놓고 → 다시 동시에 A를 잡고… 를 반복하며 CPU는 100%인데 아무도 작업을 끝내지 못하는 상황이 관측됐다.

  • 이건 데드락인가 라이브락인가? 왜 그렇게 판단하는가?
  • 위 재시도 루프의 무엇이 문제인가? 최소 수정으로 진전을 보장하려면 어떻게 고치겠는가?
  • 추가로, 한 스레드가 매번 양보만 하다 계속 작업을 못 끝내는 기아가 생길 수도 있다. 공정성을 어떻게 확보하겠는가?
답안 작성
내 답안 · 자동 저장

직접 답을 작성한 뒤, 위 해설 보기에서 모범답안과 대조하세요.