2009-12-17 7 views
1

교착 상태는 일반적으로 스레드 (또는 프로세스) A가 스레드 B를 기다리고 있고 스레드 B가 스레드 A를 기다리고 있다는 것을 의미합니다.교착 상태를 유발하지 않는 이벤트를 기다리고 있습니까?

현재 우리 응용 프로그램에서 비슷한 상황이 발생했습니다. 스레드 A는 스레드 B에 의해 이벤트가 설정되기를 기다리고 있습니다. 그러나 스레드 B는 이 아니며 스레드 A를 기다리는이 아니며 어떤 이유로 든 이벤트를 설정하지 않습니다. 나는이 상황이 또한 "교착 상태"라고 불릴 수 있는지 궁금하거나, 이것을위한 다른 용어가 있는가?

+0

예 : 희망이 없습니다. – kajaco

답변

5

나는 버그 또는 불량 디자인이라고 부릅니다. 그러나 하나의 스레드가 아직 실행 중이면 교착 상태가 아닙니다.

교착 상태가 프로그램의 글로벌 상태가 더 이상 진행되지 않는 상황 :

1

예 - 나는 이것을 교착 상태라고도 부릅니다.

그러나 전체 응용 프로그램이 아니라 하나의 스레드 (스레드 A) 만 영향을받습니다.

+3

나는 A가 멈추고 교착 상태가 아니라고 말하고 싶다. 그러나 그것은 정말로 의미 론적 퀴갈입니다. –

+0

닐이 말한 바. 교착 상태는 두 개 (또는 그 이상)의 프로세스가 ** 서로 기다릴 때 ** 진행될 수 있기 전에 완료하는 것이라고 말하고 싶습니다. 블로킹 (즉,'Thread.Sleep (-1)')은 무기한으로 교착 상태가 아닙니다. –

+0

감사합니다. 나는 그 정의를 오해 한 것 같다. – Matthias

0

여기 내 관점이다. A가 차단되었지만 B가 솔루션을 찾을 수 있기 때문에 프로그램을 종료 할 수있는 경우 교착 상태가 아닙니다.

+2

* 교착 상태는 프로그램의 전역 상태가 더 이상 진행되지 않는 상황입니다. * :이 정의는 "라이브 록"경우에도 적합합니다. – jldupont

+0

음, 흠 ... 네. 나는 그 질문에 답하려고 노력했을 뿐이었다. 당신이 말한 부분은 교착 상태가되는데 필요한 조건이다. 그리고 그것은 bytepusher의 질문에서 성취되지 않습니다. 그것은이 조건을 완전히 채우는 것이 교착 상태라는 것을 의미하지는 않습니다. 차가 보통 4 륜구동을 가지고있는 것처럼 4 륜구동을 포함한 모든 차량은 반드시 자동차가 아닙니다 ... (좋아요, 나는 이해합니다. – Ben

4

엄밀히 말하자면, 처음에는 말한 교착 상태가 아닙니다 (단, 일반적으로 다음 자물쇠를 기다리는 모든 스레드가있을 수 있습니다 : A-> B-> ...-> Z-> A).

나는 이것을 resource starvation이라고 부를 수 있다고 생각하는데, 그것은 교착 상태를 다루는 꽤 일반적인 용어이다.

관련 문제