1

シナリオを考えると、箱を塗装する色を示すさまざまな色のタグが付いた箱を塗装するように求められ、それらの箱は、箱の容量が 2 の塗装ユニットに到着します。つまり、塗装できるのは 2 つだけです。同時にボックス。ユニットは同時に異なる色を塗装することはできません。色を変更して他のボックスをペイントする前に、ボックスの色が終了するのを待つ必要があります。

プロセスとスレッドはプロセスで使用されます。問題は、FIFO 方式でボックスをペイントするように求められることです。以下の例を考えてみましょう。

Box #1    Box #2    Box #3    Box #4    Box #5
  R         B         G         R         B

指定された順序でペイントする必要があります。

Box #1, Box #4, Box #2, Box #5, Box #3
  R        R       B       B        G

ポインターを使用して、ユニットがボックス (この場合は RBG) をペイントするために使用する色の順序を調整できますが、ボックスが指定された順序でペイントされることを保証することはできませ4 1 5 2 31 4 2 5 3。したがって、#ofBoxes プロセスが実行され (同時にではなく、合計で)、順序が決定されないため、FIFO ルールに違反します。私が考えることができる唯一の方法は、フォークされたプロセス(各ボックス)の順序を(何とか)考慮し、何とかペイント操作を優先することでしたが、これは解決策でさえないと思います。これはシーケンシャル アプローチ (ソートしてからペイントする) で簡単に解決できますが、IPC と並行プロセスを考慮すると、ソートはまったく役に立たず、少なくとも順序付けは保証されません。

私はここで立ち往生しており、正確な解決策ではなく、問題を解決するためのヒントを求めているだけです。できるだけ抽象的にお願いします。前もって感謝します。

編集

必要な詳細について言及していないことをお詫びします。各ボックスを個別のプロセスとしてモデル化する必要があり、同期に信号を使用しないようにしています。

4

1 に答える 1

1

プロセスはいつでも 1 つずつ開始できwait、次のプロセスを開始する前に新しいプロセスを終了できます。

または、パイプを使用してすべてのプロセスを連鎖させstdout、最初のプロセスを 2 番目のプロセスに接続する、などの方法stdoutがあります。次に、子プロセスでは、前のプロセスから続行するための入力を取得するまで続行しません。

または、名前付きセマフォのようなものを使用して、互いに信号を送ります。

于 2013-05-04T23:57:35.433 に答える