문제

그만큼 운영 체제 개념 제 6 판은 원인 섹션을 구현하기위한 하나의 트라이얼 알고리즘을 제시합니다.

do{
  while (turn != i);
    critical section
  trun = j;
    remainder section
} while(1);

메모, PI는 식별자 I의 프로세스입니다. PJ는 식별자가있는 프로세스입니다.

질문 1 이 알고리즘은 용량으로 복용합니다 진전 요구 사항 원인 섹션 솔루션에 대한 세 가지 요구 사항 중 하나는 무엇입니까?

제 생각에는 PI가 나머지 섹션에있을 때 PJ가 중요한 섹션에 들어갈 수 있는지에 대한 결정에 참여할 수 없으며 요구 사항에 맞춰야합니다.

또는 진도 요구 사항에 대한 나의 이해는 완전히 잘못된 것입니다. 따라서 PI가 나머지 섹션에서 은퇴 한 경우,이 조치는 즉시 통화 섹션에 들어갈 수 없기 때문에이 조금물은 규칙을 위반합니다.

질문 2,

Turn == 0 및 P1이 비판적 섹션으로 입력 할 준비가되면 P1조차도 P0조차 나머지 섹션에 있다고 생각했습니다.

이 진술의 의미는 무엇입니까? 내가 생각할 수있는 한, 나는 왜 나머지 섹션에 Turn == 0과 P0이 존재하는지 이해할 수 없었습니다 ... 동시에 존재할 수 있습니다 ...

이 진술이 잘못 되었습니까?

도움이 되었습니까?

해결책

한다고 가정 turn = 0 처음에. P0은 중요한 섹션과 세트를 수행합니다 turn = 1. 이제 P1 중요한 섹션을 실행해야합니다 P0이 다시 실행되기 전에. 그러나 두 스레드가 있기 때문입니다 중요한 섹션이 있습니다 그들이 이런 식으로 사용하기를 원한다는 의미는 아닙니다. 실제로 P1은 결코 차례가되지 않을 수 있습니다. (그리고 일반적으로, 당신 컴파일 시간에 이것을 결정할 수 없습니다.)

기본적으로 문제는 스레드가 있다는 것입니다 그들의 차례를 번갈아 가도록 강요했다, 그들 중 하나가 실제로 비판적 섹션을 무기한 오랫동안 입력하고 싶지 않더라도.

그건 그렇고, 질문 1에 대한 당신의 대답은 정확합니다. 알고리즘은 실패하지 않습니다 진전 조건, 실패합니다 경계 대기 상태.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top