私は、高優先度着信メッセージを処理するためのキャッチハンドラ機能をセットアップするためにシグナル(SIGUSR2)を使用するプログラムを持っています。Cシグナルの使用とIPCメッセージキューを使用したプロセス
プログラムは、メインループのmsgrcv()を使用して、IPCメッセージキューから受信メッセージを受信します。 IPCメッセージキューへのメッセージの送信者が、優先度が高いものが入っていることをプログラムに通知したい場合、SIGUSR2をプロセスに送信して、処理中のメッセージを処理しないようにします。私は最初のエントリ時に行うシグナルキャッチハンドラ関数で
:
信号(SIGUSR2、SIG_IGN);
プリエンプションの新しい信号を無視します。
、コードは、それがバックキュー、ハウスキーピング、等に現在処理中のメッセージを格納し、次にちょうどシグナルハンドラ関数から戻る前にそれがないプリエンプション要求処理:
信号(SIGUSR2、sighandler_funcを);
質問:上記のシグナルコールが の後にちょうど1ナノ秒後に別のフラッシュ処理信号が受信された場合、プロセスは シグナルハンドラ機能に再度ディスパッチしますか?すなわち、メインループのコードで、プリエンプション信号の受信を開始/停止するためにsighold(SIGUSR2)とsigrelse(SIGUSR2)を実行するコードが優先された場合、または信号呼び出しの上の シグナルハンドラ?
[マジック8ボール](https://en.wikipedia.org/wiki/Magic_8-Ball)には「返信が嫌な、再試行する」と表示されています。 [最小限の、完全で検証可能な例](http://stackoverflow.com/help/mcve) - 好ましくは実際のコードを投稿してください。 –
優先度の高いメッセージに2番目のキューを使用するだけで、はるかに簡単で本質的な方法があるようです。 –
は同意しましたが、私は変更できる範囲でクライアントが制限しています。 – user3053087