17. 데드락의 이해

개발 99·2025년 4월 10일

공룡책

목록 보기
16/22

deadlock

  • 집합 내 어떤 프로세스가 동일 집합 내 다른 프로세스의 작업이 끝나기를 기다리는 상태

  • waiting thread가 상태를 못바꾸며, 그 이유는 다른 waiting thread에 의해서 리소스가 점유되었기 때문이다.

  • 동일 instance가 여러개이다.

  • do_work_one
    lock(first_mutex) -> lock(second_mutex) -> unlock(second_mutex) -> unlock(first_mutex)

  • do_work_two
    lock(second_mutex) -> lock(first_mutex) -> unlock(first_mutex) -> unlock(second_mutex)

서로가 필요로 하는 lock을 가지고 있어서 데드락 발생.

4개의 하위 조건을 만족하면 무조건 데드락 발생.

(잘 발생하지 않는다.)

Resource-Allocation Graph


cycle이 없으므로, deadlock이 발생하지 않는다.


deadlock이 발생


deadlock 발생 안함

important observation

  • no have a cycle
    무조건 데드락이 없다.

  • has a cycle
    deadlock이 있을 수도? 없을 수도?

Solution

  • Ignore

  • Prevent or avoid -> 불가능 근데 회피는 가능

  • detect and recover -> 현실적인 방법

Deadlock Prevention

4개 중 1개를 방지하면 해결 가능.


순번이 증가하는 방향으로 task를 실행한다.


이런 경우에도 Circular wait방지해도 발생한다.

Prevention말고 avoid를 하자. -> bank Algo.

profile
구구구구구!

0개의 댓글