본문 바로가기

IT/OS

[스레드] 교착상태(DeadLock)란?

안녕하세요 남갯입니다.


오늘은 스레드의 교착상태에 대해 알아보려고 합니다.



  • 교착상태란?


교착상태 deadlock은 두개이상의 작업이 서로의 작업이 종료가 되지 않아 서로의 작업을 무한정 기다리는 상태를 말한다. 


  • 교착상태의 발생조건

발생조건으로는 4가지 이유가 있다.


1. 상호배제(Mutual exclusion)

프로그램들이 공유자원을 동시에 쓸 수 없는 상황을 일컫는다. 상호배제를 해제하는것은 가장 확실한 교착상태 제거방법이지만 용도가 명확하지 않아지므로 잘 사용하지 않음.


2. 점유상태로 대기 (hold and wait)

자원을 점유한상태에서 다른자원을 기다린다는것 할당받은 자원을 사용하지 않으면서 계속 점유하면 그 자원이 필요한 프로세스는 무한정 대기한다.


3. 선점불가(No preemption)

어떤 프로세스가 점유중일때 다른프로세스가 자원을 뺏을 수 없다는 것이다 점유상태 대기와 같은 특수한상황이 아니라면 자원을 뺏어오는건 위험하다.


4. 순환성 대기 (Circular wait)

대기가 꼬리를 물어서 연쇄 대기상태이다.






포크철학자문제


5명의 철학자와 5명의 스파게티가 존재한다.


포크는 한개씩있고, 스파게티를 먹으려면 두개의 포크가 있어야한다. 모두 오른쪽의 포크를 동시에 집어든다면?


1. 포크를 공유하지 못함. 상호배제

2. 왼쪽 철학자가 포크를 놓기를 기다림(점유상태로 대기)

3. 왼쪽 철학자의 포크를 뺏을 방법이 없음(선점불가)

4. 각 철학자들은 자신의 왼쪽 철학자의 포크를 대기한다( 순환대기)

점유대기 해결방법 : 왼쪽포크를 못집으면 오른쪽 포크를 내려놓는다.

순환대기 해소방법 : 포크의 우선순위를 메긴다.