: DeadLock은 하나 또는 여러 개의 프로세스가 일어날 수 없는 사건을 영원히 기다리는 상태를 말합니다.
예를 들어 심부름으로 물건을 사러 갑니다. 슈퍼에 가서 계산을 하려고 보니 보유하고 있는 돈이 없거나 부족해서 "구매"라는 작업을 하지못하고 가만히 있는 상태로 "교착상태"라고도 하며 시스템적으로 한정된 자원을 여려 곳에서 사용하려고 할 때 발생합니다.
P1이 R1을 사용 중인 상태에서 P2가 R1을 사용하기 위해서 접근합니다.
P2이 R2을 사용 중인 상태에서 P1가 R2을 사용하기 위해서 접근합니다.
이럴경우 접근한 리소스가 상대방에게 할당되어 있기 때문에 p1과 p2는 무한정 대기 상태에 빠지게 됩니다.
이와 같은 현상을 DeadLock 상태라고 합니다.
교착 상태가 일어나려면 아래의 4가지 필요 조건을 충족 시켜야합니다. 이 조건 중에서 한 가지라도 만족하지 않으면 교착 상태는 발생하지 않습니다.
상호배제(Mutual exclusion) : 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구합니다.
점유대기(Hold and wait) : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다립니다.
비선점(No preemption) : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없습니다.
순환대기 (Circle wait) : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있습니다.
교착 상태 발생 조건 중 하나를 제거하면서 해결합니다. (자원의 낭비가 엄청 심합니다.)
교착 상태 발생 시 피해나가는 방법
은행원 알고리즘(Banker's Algorithm)
Android에서는 멀티스레드 환경에서 여러 개의 스레드가 동시에 공통 메모리 리소스에 접근하려고 하면 데드락이 발생할 수 있습니다.