2011-12-28 4 views
-1

상호 배제 문제에 대한 다음 알고리즘은 상호 배제 특성을 충족시키지 못합니다. 그것은 교착 상태, 기아를 만족시키고 있습니까? 또한 논쟁이없는 상황에서도 올바르게 작동합니까?중요 섹션 2 차 시도?

int p=1; 
int q=1; 

process P         process Q 
while(true){         while(true){ 
a1 : nonCriticallSection1;     a2 : nonCriticallSection1; 
b1 : while (q !=1){ do nothing}    b2 : while (p !=1){ do nothing} 
c1 : p=0;         c2 : q=0; 
d1 : critical section      d2 : critical section 
e1 : p=1;         e2 : q=1; 
    }           } 
end P;          end Q; 
+1

숙제 인 경우 '숙제'태그를 추가하십시오. 또한, 귀하의 질문을 명확히하시기 바랍니다, 어떻게 ""교착 상태를 만족할지 모르겠다. – thiton

답변

0

알고리즘은 교착 상태, 기아 상태 및 경합 상태에서 정상이어야합니다.
그러나 이러한 종류의 솔루션은 확장 성이 없으며 원하는 프로세스가 아닌 두 프로세스에서만 작동합니다.
유용한 알고리즘을 찾으려면 wikipedia'e entry for deadlock을 살펴보십시오.

EDIT : 프로세스가 임계 구역에 들어가기를 원할 때마다 말하는 프로세스 별 플래그를 설정할 때 나는 별표를 표시 할 수 없습니다. 따라서 프로세스 P가 중요한 섹션을 소유하지만 프로세스 Q가 입력하려고하면 cheduler가 P를 다시 실행하도록 선택하더라도 q == 0인지 확인하고 대기중인 경우 P가 임계 섹션을 종료 할 때 처리합니다. .
물론 당신의 사례는 연구 사례입니다. 폴링과 아마도 무한 사이클을 사용하기 때문에 실제 응용 프로그램에서는 작동하지 않습니다. 나는 그것을 사용하려고하지 말 것을 강력히 권한다.

+0

감사합니다 andreapier ...이 알고리즘에 기아가 어떻게 적용되는지 설명 할 수 있습니까? 나는 그것을 이해할 수 없다. 뿐만 아니라 알고리즘은 교착 상태가 될 수 없습니다. 안 그래? – desh

+0

감사합니다. andreapier – desh