Deadlock은 mutual exclusion 과정에서 자원 접근 권한 획득과 자원 접근 권한 반환 관계의 꼬임으로 발생한다.
Hold and Wait (점유 대기)
다수의 스레드가 서로 다른 락을 획득한 후, 다른 락을 기다리며 무한 대기 상태에 빠지게 된다.
Circular Wait (순환 대기)
순환 대기는 점유 대기와 공유 자원 획득 후 다른 공유 자원 획득 시까지 무한 대기 상태는 동일 하지만, 서로 다른 자원을 점유하면서 서로의 자원을 기다리며 순환 대기 상태에 빠지게 된다.
Starvation (기아 상태)
다른 프로세스나 스레드가 공유자원의 접근 권한을 지속적으로 가짐으로써 발생할 수 있다.
프로세스나 스레드가 공유 자원의 접근 권한을 해제하더라도 운영 방식 등의 이유로 인해 해당 프로세스나 스레드가 공유 자원의 접근 권한을 획득하지 못하는 경우도 동일하다.
프로세스나 스레드의 우선순위가 다를 경우, 우선순위가 낮은 프로세스나 스레드는 스케줄러에 의해 공유 자원에 대한 접근 권한을 획득할 만큼의 수행 시간을 갖지 못해 무한히 대기 상태에 놓일 수 있다.
Livelock
두 개 이상의 스레드가 서로의 진행을 방해하지 않으면서도, 실제로는 작업을 완료하지 못하고 무한히 반복되는 상태를 말함.
두 스레드가 서로의 상태를 확인하고 상대방이 특정 조건을 만족할 때 까지 기다리는 상황이다.
이 경우, 두 스레드가 서로의 상태를 계속해서 변경하지만, 실제로는 아무런 작업도 완료되지 않는다.
'🚣활동 > NHN Academy' 카테고리의 다른 글
Socket, TCP, UDP (0) | 2025.02.10 |
---|---|
Thread Pool (0) | 2025.02.04 |
Thread & Concurrency (1) | 2025.02.04 |
Main Thread, Single Thread, Multi Thread, Daemon Thread (1) | 2025.02.03 |
Thread (스레드) (0) | 2025.02.03 |