2017-04-09 10 views
0

나는 상호 제외에 대한 몇 가지 예를 읽고, 나는 나에게 건네 다음의 예를 제외하고 대부분의 실행을 이해할 수 :Unclearance은 상호 배제 예를

boolean[] flag = new boolean[2]; 

enter image description here

하나 while- 조건은 다른 프로세스의 플래그 [n] 상태에 따라 다릅니다. 예를 들어 P1이라는 제목을 사용하려면 flag[0]과 을 모두 true으로 설정해야합니다.

내 interpertation에 따르면 전체 실행은 다음과 같이해야합니다 :

P1 - > flag[1] = true 
while(flag[0])   // flag[0] is still state-undeclared 
P2 -> flag[0] = true // so P0 must set it true(?) 
critic1(); 
while(flag[1]) 
critic2(); 

flag[0] true로 flag[1] 세트를 모두 프로세스가 while(flag[n]) 조건과 race-을 통과하기 때문에이 정확하지 않을 수 있지만 상태가 여전히 발생할 수 있습니다. 내가 오해하니?

+0

언제든지 문의하십시오. –

답변

1

선언 및 정의

boolean[] flag = new boolean[2]; 

자바처럼 보이지만 자바 부울 배열은 기본값으로 거짓으로 채워진다.

그래서, 예를 들면 P1이 그것으로 향하기 위해서 [1] 둘 필요 플래그 [0] 플래그가 true로 설정되는 임계 영역 이다. P1의 경우하지

아니오의 Critical Section로 향하고하는 유일한 방법은 P1Critical Section 들어가기 전에 P0의 문 다음이 실행될 수 없습니다해야한다는 것입니다. 기본 flag[0] = false으로

flag[0] = true; 

이후 는 루프 조건 while(flag[0]) 거짓되며 P1는 임계 영역을 입력합니다.

경우 프로세스 P0P1 다음 명령문에 대해 실행 모두 대응 다음 명령문 전에 을 처리되는 방식으로 스케줄링된다

flag[0] = true; and flag[1] = true; 

이러한 경우 교착 발생할 .