2011-03-07 4 views

답변

3

커널 선점은 교착 상태가 없음을 보장하지 않습니다.

스레드는 아직 잠금을 해제하지 않고도 잠금을 유지할 수 있으며, 다른 스레드가 동일한 잠금을 얻으려는 경우에도 여전히 교착 상태가 발생할 수 있습니다. 교착 상태를 피하기 위해 잠금을 보유하고있는 스레드가이를 해제하기로 결정해야합니다. 즉, 스레드 또는 다른 논리가 스레드 을 선점하여 잠금을 해제해야합니다. 커널 자체가 스레드가 잠금을 해제하도록 할 수 없습니다.

커널은 단순히 다른 스레드를 실행하도록 예약 할 수 있지만 다른 스레드가 첫 번째 스레드가 완료되면 해당 스레드가 차단됩니다.

스레드 A는 스레드 B가 획득 한 일부 공유 리소스에 대한 잠금 대기 : 예를 들어

.

스레드 A get이 선점되고 스레드 B가 예약됩니다.

스레드 B가 공유 리소스 스레드 A의 잠금을 대기 중입니다.

교착 상태. 스레드 A 나 스레드 B 모두 진행을 할 수 없습니다.

교착 상태를 해제하려면 스레드 A 또는 B가 잠금 해제되도록 선행해야합니다. 커널 선점은 그렇게 할 수 없습니다.

+0

스레드가 여전히 잠금을 해제하지 않고도 잠금을 유지할 수 있지만 여전히 교착 상태가 발생할 수 있습니다. 동의하지 않습니다. 다른 스레드가 잠금을 취해야하는 경우 교착 상태가 발생할 수 있습니다. 그러나 일부 조건에서만 공유되는 잠금이있을 수 있으며 공유되지 않는 경우 스레드가 계속 최적화 상태를 유지할 수 있습니다. "잠금을 해제하지 못하면 교착 상태가 발생합니다"라는 말은 너무 강합니다. –

+0

@Ben : 동의합니다. 나중에 어떤 상황에서 교착 상태가 발생할 것인지를 분명히했습니다. 그러나 귀하의 요점은 유효합니다. 나는 그것을 더 명확하게하기 위해 논평을 수정할 것이다. 감사. –