質問: 2つのセマフォを使用する厳密なNプロセス同期 数年前、私はオペレーティングシステムセミナーを持っていました。私はできるだけ少ないセマフォを使ってプロセスの同期化のためのアルゴリズムを作成することを任されていました。それは次のようになっているはずです。 P1 -> P2 -> P3 -> P4 -> P5 P(n) - プロセス 一度に1つのプロセスしか実行されず、**厳密な注文が必要**。 昨年、私は3つのセマフォを使ってソリューションを提供しました(効果的に障壁を作り出しています)。 ここに私のアルゴリズムです: ``` P S1 S1 S1 S1 4W1 W0 W0 W0 W0 4S0 P S2 S2 S2 3W2 W1 W1 W1 3S1 P S1 S1 2W1 W0 W0 2S0 P S2 W2 W1 S1 P ``` (実行は上から順に、各レーンは単一のプロセスです) P - シリアライズしなければならない本当の仕事 W(n) - waitn S(n) - signaln 4W1は "do 4 wait1s"を意味します wait1とsignal1はセマフォ1などで動作します... アルゴリズムの説明: 1. すべてのプロセスレーンが開始されます 2. 最初のプロセスは実行され、他のプロセスはsignal1() 3. 最初のプロセスを除くすべてのプロセスはセマフォ0(wait0を実行)を待つ 4. process1が4つのsemaphores1を待った後、1つ目のプロセスが正常に完了するのを待つため、4つのシグナル0を送信してバリアを作成します。 問題は、2つのセマフォを使って動作させる方法を理解できないことです。 PS:これは課題ではない、それは長すぎるために私の頭の中に横たわっている問題です。
回答: 2つのセマフォを使って行うことはできません。 3が最小です。