0

http://codepad.org/rHIKj7Cd (コード全体ではありません)

私が達成しようとしているのは、親が共有メモリに何かを書き込んでから、子がそれに応じて反応し、5 秒ごとに何かを書き戻すことです。私は SIGUSR1-2 を使用することを考えました。おそらくハンドラーで signum をオンに切り替えましたが、setitimer が SIGALRM をスローするため、それをコーディングする方法がわかりません。ハンドラーでフォークしたくないのは明らかです。1つの子と1つの親しか必要ないため、異なる動作をどのように定義すればよいですか? 私の目標が明確であることを願っています。

5 秒ごと:

  • SIGALRM はタイマーによってスローされます
  • 親はその計算を共有メモリに書き込みます (セマフォが使用されています)
  • 子は共有メモリから読み取り、その計算を書き戻します

また、 signal()の使用が推奨されていないことも知っていますが、これは重要ではありません。

4

1 に答える 1

1

タイマー シグナル ハンドラーは、親プロセスが待機するセマフォでの "post" 操作のみを行い、できる限り少なくする必要があります。親プロセスはそれを機能させ、子が待機しているセマフォで「ポスト」を使用します。子はその作業を行い、別の「ポスト」を介して親にシグナルを返し、セマフォの待機に戻り、親は子からの結果で何かを行うことができます。最後に、親プロセスはタイマー シグナル ハンドラからのセマフォを待機するために戻ります。

もちろん、プロセス間のシグナリング、およびタイマー シグナル ハンドラから親プロセスへのシグナリングは、実際にはセマフォである必要はありません。POSIX システムのプロセス間で「シグナル」を通信および送信する方法は他にもあります。これには、パイプからの読み取り/パイプへの書き込み、共有メモリ内の特殊なビットまたはバイトの設定、またはメッセージ キューが含まれます。

于 2012-12-14T11:41:51.267 に答える