2017-12-05 23 views
0

최근에는 운영 체제 개념을 연구하면서 엄격한 변경을 배우게되었습니다. 우리는 다음과 같이 이동이 개 프로세스를 경쟁 조건의 가능성을 줄이고 처리하려면 :3 가지 프로세스에 대한 엄격한 변경

프로세스 0 :

While (TRUE) { 

    while (turn != 0); // wait 
    critical_section(); 
    turn = 1; 
    noncritical_section();} 

} 

프로세스 1 :

While (TRUE) { 

    while (turn != 1); // wait 
    critical_section(); 
    turn = 0; 
    noncritical_section(); 

} 

하지만 내가 처리 할 수있는 방법 궁금하네요 3 경주 조건을 훨씬 더 줄이기위한 프로세스?

나의 접근 방식은 다음과 같습니다 프로세스 0 :

while (turn != 0 && turn != 2); // wait 
critical_section(); 
turn = 1; 
noncritical_section();} 

프로세스 1 :

while (turn != 1 && turn != 0); // wait 
critical_section(); 
turn = 2; 
noncritical_section();} 

프로세스 3 :

while (turn != 1 && turn != 2); // wait 
critical_section(); 
turn = 0; 
noncritical_section();} 

내 접근 방식은 괜찮습니까? 너희들은 뭐라고 제안하니? 거기에 더 좋은 점이 있습니까?

덕분에 당신은 예를 들어, 그것은 회전 = 0 턴 = 1로 가거나 = 2 코드에 따라 수 차례 수, 어쨌든 반드시 엄격하게 대체하지 것 무슨와

+0

발생하는 특별한 문제가 있습니까? 작동하지 않는 것이 있습니까? 특정 기술적 세부 사항이 있습니까? 그렇지 않다면 작업 코드에 대한 피드백 요청을 https://codereview.stackexchange.com/ –

+0

@ FrançoisAndrieux로 보내야합니다. 이것은 이론적 인 질문입니다. 두 가지 프로세스를 처리하는 코드를 배웠습니다. 난 그냥 엄격한 교대를 사용하여 3 프로세스를 처리하는 내 접근 방식이 효과가 있는지 알고 싶다? 또는 이것에 대한 더 나은 해결책이 있다면. – Painkiller

+0

이러한 종류의 질문에 대한 문제는 "거기에 더 좋은 것이 있습니까?"라는 대답입니다. 거의 확실하게 "아마"입니다. 개선 할 수없는 완벽한 솔루션을 찾지 못할 수도 있습니다. 만장일치로 받아 들여지는 이상적인 해법이 존재하기에 충분할만큼 공통적 인 문제는 아니기 때문에 정답입니다. 그 외에도 다른 솔루션을 정당화하는 데 도움이되는 문맥은 없습니다. 오히려이 질문은 너무 광범위하거나 주로 의견을 바탕으로 한 것입니다. –

답변

0

. 내 제안은 각 코드 경로마다 하나씩 OS 레벨 이벤트를 사용하는 것이며, 각 프로세스는 뒤 따르는 이벤트를 트리거합니다.

+0

@SornelHaetir 좋습니다 :) 감사합니다! – Painkiller