2013-03-05 1 views
5

다음과 같이 각각 상호 제외 및 교착 상태를 정의합니다. 매 순간마다 각 공유 자원이 정확히 하나의 프로세스에 할당되거나 사용 가능하면 상호 배제 조건이 존재합니다. 집합의 각 프로세스가 집합의 다른 프로세스 만 발생할 수있는 이벤트를 기다리는 경우 프로세스 집합이 교착 상태가됩니다.상호 배제가 보장된다면, 세마포어와 같이 교착 상태가없는 프로그램입니까?

이진 세마포어가 사용되어 그 중 하나만 중요한 영역에 동시에 들어갈 수 있습니다. 각 프로세스는 임계 영역에 들어가기 직전에 중단을하고 중단 한 후에는 상호 배제가 보장됩니다.

데드락이 발생하기 위해 모두 보유해야하는 4 가지 조건이 있으며, 그 중 하나는 상호 배제 조건입니다 (두 개의 프로세스가 임계 섹션 내에 동시에있을 수 없음).

상호 배타가 보장되므로이 경우 프로그램에 교착 상태가 있습니까?

감사합니다.

답변

6

반드시 그렇지는 않습니다. 이 두 개의 스레드를 상상해 : - 각 순간에, 세마포어 A와 B가 어느 스레드 중 하나 또는 전체 시스템을 사용할 수에 의해 소유 - 여기

Thread 1   Thread 2 
============  ============= 
Acquire A   Acquire B 
Acquire B   Acquire A 
Release B   Release A 
Release A   Release B 

를 상호 배제 참으로 보장되어 있지만 교착 상태가 여전히 가능 스레드 1 및 2의 경우 각각은 첫 번째 잠금 (스레드 1의 경우 A, 스레드 2의 경우 B)을 획득하지만 다른 스레드가 보유하고있는 자원을 기다리면서 교착 상태가됩니다.

희망이 도움이됩니다.

관련 문제