다음 처리를 하지 못하는 상태
| 구분 | Deadlock | Looping |
|---|---|---|
| 원인 | 서로 자원 대기 | 잘못된 반복 조건 |
| 발생 대상 | 둘 이상의 프로세스/스레드 | 하나의 프로세스/스레드 |
| CPU 상태 | 유후(idel) - 아무 일 안 함 | 바쁨(busy) - 계속 같은 코드 실행 |
| 복구 방법 | OS가 탐지&자원 회수 필요 | 코드 수정 OR 프로세스 강제 종료 |
| 예시 | 두 스레드가 서로 락을 기다림 | while문을 탈출하지 못함 |
상황
1. 멀티 프로그래밍 환경에서 한정된 자원을 얻기 위해 서로 경쟁하는 상황 발생
2. 한 프로세스가 자원을 요청했을 때, 동시에 그 자원을 사용할 수 없는 상황이 발생
3. 이때 프로세스는 대기 상태로 돌아감
4. 대기 상태로 들어간 프로세스들이 실행 상태로 변경될 수 없을 때 "교착 상태" 발생
아래 4가지가 모두 성립해야 데드락 발생
한 번에 한 프로세스만 사용할 수 있음대기하는 프로세스가 존재해야 함강제로 빼앗을 수 없음순환 형태로 자원을 대기하고 있어야 함