본문 바로가기

프로그래밍/기타정보

데드락, Live락 대드락의 설명

http://blog.naver.com/thdghkstlr/220049048533


1. 데드 락(Dead Lock)이란?

 

두 개 이상의 작업이(프로세스, 쓰레드) 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태를말한다.

 

하나의 사다리가 있고 두 명의 사람이 각각 사다리 위, 아래에 있다고 가정할 때

 

아래사람은 위로, 위에 사람은 아래로 내려오려고 한다면 두 사람은 서로 상대방이 비켜줄 때까지 하염없이 기다려야 한다.

 

 

2. 스핀 락(Spin Lock)이란?

 

임계영역이 있고, 한 쓰레드가 크리티컬 섹션에 대한 Lock을 소유하고 있다면 그 Lock이 반환될 때까지 계속 확인하며 기다리는 것을 의미한다.  Lock,, Unlock이 자주 일어나는 곳에서는 효율적이다.

왜냐하면 컨텍스트 스위칭(Context Switching)을 하지않고 루프를 돌면서 재시도 하기 때문이다.

 

그 덕에 잦은 컨텍스트 스위칭을 하지 않아 효율을 높일 수 있지만,

 

Lock이 길게 유지된다면 나머지 blocking 상태의 쓰레드들이 계속 무한루프를 돌아 CPU를 쓸데없이 낭비 하는 경우가 생길 수 있다.

 

 

3. 라이브 락(Live Lock)이란?

 

두 개 이상의 쓰레드가 다른 쓰레드의 행동에 영향을 받으며 진행되는 경우, 쓰레드간의 신호가 서로 맞지 않아 신호가 맞을 때까지 진행하지 못해서 마치 행동은 일어나지만 block된 것처럼 보이는 현상을 말한다.

 

한 길을 지나가는데 마주보는 사람이 서로 같은 방향으로 계속 비켜줘서 지나가지 못하는 경우를 말한다.