2017-12-05 13 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

特に問題がありますか?何か動作していないのですか?あなたが尋ねている特定の技術的詳細はありますか?そうでない場合は、作業コードのフィードバックをhttps://codereview.stackexchange.com/ –

+0

@FrançoisAndrieuxにリクエストしてください。これは理論的な質問です。私は2つのプロセスを処理するコードを学びました。厳格な交代を使用している3つのプロセスを処理する私のアプローチが有効かどうかを知りたいだけですか?またはこれに対するより良い解決策があれば。 – Painkiller

+0

このような質問の問題は、「そこには何か良いことがありますか?」という答えがあります。ほぼ確実に "おそらく"です。改善の余地がない完璧なソリューションを考え出すことはまずありません。そして、満場一致で理想的なソリューションが存在するのは一般的な問題ではないので、正解が確定する可能性は低いです。それに加えて、別のものに対する解決策を正当化するのに役立つ文脈はありません。むしろ、この質問はあまりにも幅広く、主に意見に基づいています。 –

答えて

0

それは必ずしも厳密に代替とにかく、例えば、それはターン= 0と= 1ターンに入るか= 2のコードが続く可能性がなるかもしれません。私の提案は、コードパスごとに1つのOSレベルのイベントを使用することで、各プロセスはそれに続くイベントをトリガーします。

+0

@SornelHaetir Alright :)ありがとう! – Painkiller

関連する問題