2017-11-27 2 views
0

피터슨의 상호 배제 알고리즘에 대해 읽었습니다. 중요한 섹션의 입력 부분에있는 마지막 문구에 if 거기에 문 :피터슨의 알고리즘에 if 문이있는 경우 어떻게 될까요?

flag[j] = true; 
turn = j 
if(turn ==j) 
     while(flag[k]); 
나는 하나 개의 프로세스는 처음 두 개의 문을 통과하면, 두 번째 과정은 다음의 중요한 섹션에 첫 번째 과정 헤드 전에 첫 번째 문이야 몰래, 그리고 수 있기 때문에 상호 배제가있을 거라 생각

두 번째 과정은 병동에 들어가서 재산을 망칠 수는 있지만 공정성이나 생기에 대해 확신하지 못했습니다. 당신이 검사를 분리하는 경우

모든
+0

여전히 2 개의 프로세스에서만이 작업을 수행하고 있습니까? 그렇지 않다면, 당신은 일반화에 실패했습니다. 그렇다면 왜 표기법을 매개 변수'j'와'k'로 바꾸 었습니까? – Prune

+0

오직 두 가지 과정 만 쓰고 있는데, 필자는 필자가 JK를 쓰는 동안 다른 누군가가 J.K를 쓰는 것을 듣고 표기법을 바꾸었다. 이상한 나는 알고 있지만 어깨를 으.한다. – Marorin

답변

0

먼저, 다음은 더 이상 당신이 언급 한 정확히 이유 피터슨의 알고리즘 없습니다 :. 두 작업 사이에, 다른 프로세스에

공정성에 영향을 몰래 할 수 있습니다 생동감 ("생기"가 아님)은 동일한 분리 점에 경첩이 필요합니다. 변경으로 인해 알고리즘이 단조롭게 허용되기 때문에이 두 속성은 그대로 유지되며 상호 배제가 중단된다는 경고가 표시됩니다.

+0

두 개의 연산 사이에 처음 두 명령문과 if 명령문이 맞나요? 내가 옳은지 아닌지 전에 내가 쓴 것을 생각해 보라. – Marorin

+0

내가 소개 한'if'와'while' 사이의 구분에 대해 말하고 있습니다. – Prune

+0

아, 그래서 하나의 프로세스가 if 문으로 간다면 상호 배제가 발생합니다. 그런 다음 두 번째 프로세스가 CS로 끝까지가는 지 확인합니다. – Marorin

관련 문제