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된 것처럼 보이는 현상을 말한다.
한 길을 지나가는데 마주보는 사람이 서로 같은 방향으로 계속 비켜줘서 지나가지 못하는 경우를 말한다.
'프로그래밍 > 기타정보' 카테고리의 다른 글
메모리 할당 (0) | 2015.01.15 |
---|---|
Windows 메모리/리소스 누수 디버깅 기법들 (0) | 2015.01.06 |
java 와 c/c++의 차이 (0) | 2014.07.21 |
내가 추구하는, 비효율적이고 불합리한 게임개발. (0) | 2014.07.10 |
2D 스프라이트 (0) | 2014.04.02 |