교착 상태가 발생하면 두 개 이상의 스레드가 있습니다. 각 스레드는 하나의 잠금을 보유하고 있으며 다른 잠금을 획득해야합니다. 각 스레드는 다른 스레드가 보유하고있는 잠금 장치에서 잠자고 있습니다. 그들이 잠 들어 있기 때문에, 그들은 "죽었다"- 코드를 실행하지 않고, 그들은 결코 않을 것이다.
라이브 록이있는 경우 두 개 이상의 스레드가 실행 중이며 코드를 실행하고 있지만 라이브 잠금의 다른 스레드에서 발생한 이벤트에 응답하기에는 너무 바빠서 코드의 조건을 계속 수행 할 수 없습니다.
내 자바는이 시점에서 심각하게 녹슨, 그래서는 희망-간단한 설명과 함께 가자 다음을 먹고 (
두 스레드, A
및 B
이 어떤 작업을 수행하기 위해 잠금 1
및 2
을 취득해야 샌드위치) :이 두 항상 스레드 다른 방법은, 어느 하나가 지금까지 에게 샌드위치를 먹을 경우
Thread A tries this:
Acquire lock 1
if try_lock(2) == success
eat the sandwich
else
drop 1
sleep a bit
go back to start
Thread B tries this:
Acquire lock 2
if try_lock(1) == success
eat the sandwich
else
drop 2
sleep a bit
go back to start
가 : 그들은 둘 다 떨어 잠금을 획득, 테스트 및 모든 시간을 할애하지만 일 아이는 앞으로 나아갈 수 없다.
흥미 롭습니다. 필자는 파이프를 통해 데이터를 교환하는 두 개의 스레드를 포함하는 "라이브 록"과 완전히 다른 정의를 보았습니다. 그리고 보낸 사람은 플러시를 잊어 버려서 독자가 데이터를 무기한 대기하도록합니다. – finnw
+1 매우 흥미 롭습니다. – naikus