以下は私の質問です。太字のテキストに問題があります。「複数のプロセスを使用して一連の (小さい) 正の整数の合計を計算するプログラムを作成します。この宿題には 2 種類のプロセスがあります: I. "スレーブ" プロセスのセット: 各スレーブ プロセスは 2 つのプロセスを取得します。その argv から小さな整数を計算し、その合計を計算し、exit システム コールを使用して結果を返します. したがって、すべての合計に対してスレーブ プロセスが作成されます. II) 「マスター」プロセス: このプロセスは、スレーブ プロセスの作成と調整を担当します計算. すべての計算は "スレーブ" プロセスによって行われることに注意してください. すべての数値はコマンドライン argv で提供されます.また、マスター プロセスは、計算開始時のタイマーを 3 秒に設定しました。この時間までに計算が完了していない場合、マスター プロセスはすべてのスレーブを強制終了してから終了します。この場合、適切なメッセージを出力する必要があります。マスター プロセスは、スレーブ プロセスの複数のセットを作成する必要がある場合があることに注意してください。たとえば、追加する数字が 8 つある場合、マスター プロセスは最初に 4 つのスレーブを作成し、それらから結果を取得します。この時点で 4 つの番号があり、2 つのスレーブが作成されます。最後に、合計を計算するために 1 つのスレーブが作成されます。簡単にするために、追加する整数の数が奇数の場合、マスターは数値のリストに 0 を追加します。これは、計算中のどのステップでも発生する可能性があります。マスター プロセスのコードは個別にコンパイルする必要があり、その実行可能コードはマスターと呼ばれる必要があります。スレーブ プロセスの実行可能コードは、slave と呼ばれる必要があります。したがって、1 から 7 までの数値の合計を計算するには、コマンド ラインは次のようになります master 1 2 3 4 5 6 7 結果は exit システム コールによって渡されるため、数値は小さくしてください (1 桁)。各スレーブ プロセスは、そのプロセス ID、オペランド、およびそれらの合計を出力します。マスターがスレーブから結果を取得するたびに、スレーブの pid と部分合計を出力します。」
3 に答える
プロセスを使用するよう求められます。これは、必要fork
なすべてのワーカーに対して必要であることを意味します。また
また、マスター プロセスは、計算開始時のタイマーを 3 秒に設定しました。この時間までに計算が完了していない場合、マスター プロセスはすべてのスレーブを強制終了してから終了します。
を設定するalarm
と、シグナルが送信され、SIGALARM
受信時に特定のプロセス ID で使用kill
されます (から取得できますfork
)。ワーカーが終了すると、メイン プロセスも終了し、アラームもトリガーされません。
マルチプロセス プログラミングに慣れていない場合、これはやや複雑な作業です。ここで、いくつかのプロセスを作成して、たとえば 3 秒後に強制終了してみてください。さらに問題が発生する場合は、コードを投稿して具体的な質問をしてください。
あなたの質問が正しいかどうかわかりません。計算を行うワーカー スレッドごとにヘルパー スレッドを開始することができます。ワーカー スレッドの tid をそのヘルパー スレッドに渡し、ヘルパー スレッドを 3 秒間スリープさせてから、ワーカー スレッドが終了したかどうかを確認し、終了していない場合は強制終了します。または、専用のタイマー モジュール/タスクがある場合は、ワーカー スレッドごとにタイマーを開始できます。