반응형

교착상태(Dead Lock)

멀티스레드 프그래밍에서 교착상태란 두 스레드가 서로를 기다리는 상황을 의미합니다.

즉, 한정된 자원을 여러 스레드에서 사용하려고 할때, 발생할 수 있습니다.

 

게임 서버에서 교착 상태가 되면 발생하는 현상

CPU 사용량이 현저히 낮거나 0%입니다. (동시 접속자 수와 상관없음)

클라이언트가 서버를 이용할 수 없습니다. (예시 : 로그인을 못하거나 뭔가 요청을 보냈는데 응답이 오지 않습니다.)

 

교착 상태(Dead Lock)의 발생 조건

교착 상태는 한 시스템 내에서 다음의 네 가지 조건이 동시에 성립할 때, 발생

상호 배체(Mutual exclusion) 자원은 한 번에 한 프로세스만이 사용할 수 있어야 한다.
점유 대기(Hold and wait) 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.
비선점(No preemption) 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야한다.
순환 대기(Circular wait) 프로세스의 집합{P0, P1..}에서 P0는 P1이 점유한 자원을 대기하고 P1은 P2가 점유한 자원을 대기하고 P2..이 점유한 자원을 대기하며 Pn은 P0가 점유한 자원을 요구해야한다.

 

반응형

+ Recent posts