언어 및 엔진/C++

[C++] DeadLock

phantom0308 2024. 4. 19. 18:23

DeadLock

서로가 상대방의 자원을 내놓기를 바라면서 무기한 연기 상황에 빠지는 것 


=> 교착상태


발생 조건

상호 배제, 점유 대기, 비선점, 순환 대기

상호 배제

프로세스들이 필요로 하는 자원에 대해 배타적인 통제권 요구


점유 대기

프로세스가 할당 된 자원을 가진 상태에서 다른 자원을 기다린다.

비선점

프로세스가 어떤 자원의 사용을 끝낼 때 까지 그 자원을 뺏을 수 없다


순환 대기

각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다

해결 방안

상호 배제 해결 : 자원은 한 번에 한 프로세스만이 사용
점유 대기 해결 : 하나의 자원을 점유하고 있으면서 다른 자원을 추가로 점유하기 위해 
대기하는 프로세스가 있어야 함
비선점 해결 : 다른 프로세스의 사용이 끝날 때까지 강제로 자원을 뺏을 수 없게 한다
순환 대기 해결 : Pn - 1은 Pn이 점유한 자원을 대기한다.마지막인 Pn은 P0이 점유한
자원을 대기한다.

회피

자원 할당 그래프 알고리즘(자원이 1개일 때) - 불안정상태(자원이 얼마 없음)
일때는 기다리게 하고, 안정상태일때는 자원을 줌

은행원 알고리즘(자원이 2개 이상일 때)

충분한 자원을 항상 확보해 놓는 것