데드락
Posted 2012. 9. 4. 14:41정의
두개 이상의 스레드가 하나의 자원을 공유할때
ex) A 에서 B가 가진 자원이 있어야만 동작 가능하며 B의 작업이 끝나기를 기다리고 있는데
B 에서도 A가 가진 자원이 필요해 A가 끝나기를 기다리는 상태일때 두 작업은 교착상태에 빠지게 된다.
발생조건
Mutual exclusion : 한번에 오직 1개의 프로세스만 이 자원에 접근 가능
Hold and wait : 최소한 한개의 자원을 가진 프로세스가 다른 프로세스 소유의 자원을 추가로 얻기 위해 기다릴때
No preemption : 해당 작업이 완료되기 전까지는 자원이 반환하지 않는것
Circular wait : 연쇄적으로 자원을 기다리는 형태( 1은 2를 기다리고, 2는 3을 기다리고, 3은 1을 기다리는 상태 )
방지 방법
타임 아웃을 줘서 어느 일정시간 동안 락을 기다리다가 반응이 없으면 롤백 시키는 타임아웃 설정
락 타임아웃의 설정 : SET LOCK_TIMEOUT 10000
락 타임아웃 확인 : SELECT @@LOCK_TIMEOUT
트랜잭션 추가
또는 프로시저 우위를 설정해 준다
우선 순위의 레밸은 Low와 Normal로 나타낼수 있고 Priority라는 것을 이용하여 설정 할 수가 있다
SET DEDLOCK_PRIORITY LOW
또는 한 프로시저가 너무 오랫동안 사용하고 있다 의심되는 것을 강제로 종료 시키는 방법
'Server' 카테고리의 다른 글
Connection Error] IOCP : GetQueuedCompletionStatus (0) | 2013.10.18 |
---|---|
크리티컬섹션, 뮤텍스 (0) | 2012.09.04 |
3way hand shake (0) | 2012.08.13 |
라우팅 (0) | 2012.08.13 |
OS의 종류와 차이점 (0) | 2012.08.13 |
- Filed under : Server