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:これは課題ではない、それは長すぎるために私の頭の中に横たわっている問題です。

1
参考までに、特定の順序で5つのプロセスを実行する必要があり、残りのプロセスが前のプロセスが完了するまで続行できない場合は、1つのプロセスが5つのプロセスになります。理想的な解決策は、 1つのプロセスと、セマフォーです。
追加された 著者 cHao,
はい、実際は解決策です。なぜ誰かが共有メモリ(セマフォなど)を使って同時に開始されたプロセスをN個直列化する必要があるのですが、1つのプロセスしか作成できず、プログラムコードで5つのタスクが既にシリアル化されています。しかしここでは、あなたはマスタープロセスを持っておらず、あなたはそれを偽装することはできません。
追加された 著者 Kveri,

1 答え

2つのセマフォを使って行うことはできません。 3が最小です。

0
追加された