스레드 프로그래밍에서 라이브락(Livelock) 이라는 것이 있습니다.
데드락과 결과는 같지만 과정은 좀 다른 것이죠

데드 락과 같이 배타 제어에 의해 락 된 자원에 복수의 유저로부터 액세스 요구가 나왔을 때에 서로 자원이 해방되는 것을 Busy 상태로 기다리는 상황이 발생한다.
데드 락에서는 각 유저의 자원 획득을 위한 처리가 진행하지 않는데 대해, 라이브 락에서는 자원 획득의 처리가 진행되고 있는 것에도 불구하고 어느 유저도 자원을 획득 할 수 없는 상황이다.

예를 들면 좁은 길을 걷고 있다가 대면한 보행자 2명이 서로 상대가 피하려고 한 방향으로 움직여 버려 피할 수 없는 경우가 있다.
다음에 반대의 방향으로 피할 려고 하지만 피할 수 없다. 이러한 상황이 계속 되어 몇 시간이 지나도 엇갈릴 수 없게 되는 상황에 해당한다.

사용자 삽입 이미지

그림 1의 상황에서 서로 양보하려다 보니 그림 2의 상황이 되고, 또 서로 양보하려다 보니 그림 3이 되고 이것이 계속 반복 되어 A와B는 서로 지나가지 못하는 상태가 됩니다.


식사를 하는 철학자의 문제에서는젓가락이 갖추어지지 않았던 경우에 획득한 젓가락을 일단 되돌리는 전략으로 변경해도 타이밍이 나쁘면 일제히 왼쪽의 젓가락을 취한 후 원래대로 되돌리는 것을 계속 반복하는 일이 된다.




출처 : http://ja.wikipedia.org/wiki/%E6%8E%92%E4%BB%96%E5%88%B6%E5%BE%A1
          + 본인 번역 + 본인 그림

신고
by 흥배 2009.03.21 12:09
| 1 |