반응형
교착상태(Dead Lock)
멀티스레드 프그래밍에서 교착상태란 두 스레드가 서로를 기다리는 상황을 의미합니다.
즉, 한정된 자원을 여러 스레드에서 사용하려고 할때, 발생할 수 있습니다.
게임 서버에서 교착 상태가 되면 발생하는 현상
CPU 사용량이 현저히 낮거나 0%입니다. (동시 접속자 수와 상관없음)
클라이언트가 서버를 이용할 수 없습니다. (예시 : 로그인을 못하거나 뭔가 요청을 보냈는데 응답이 오지 않습니다.)
교착 상태(Dead Lock)의 발생 조건
교착 상태는 한 시스템 내에서 다음의 네 가지 조건이 동시에 성립할 때, 발생
상호 배체(Mutual exclusion) | 자원은 한 번에 한 프로세스만이 사용할 수 있어야 한다. |
점유 대기(Hold and wait) | 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다. |
비선점(No preemption) | 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야한다. |
순환 대기(Circular wait) | 프로세스의 집합{P0, P1..}에서 P0는 P1이 점유한 자원을 대기하고 P1은 P2가 점유한 자원을 대기하고 P2..이 점유한 자원을 대기하며 Pn은 P0가 점유한 자원을 요구해야한다. |
반응형