シグナルハンドラから共有データにアクセスするのが良いかどうか知りたいです。つまり、単一プロセスのマルチプロセスシステムとマルチスレッドシステムのシナリオを考えてみてください。マルチプロセスシステムでは、プロセスに特定の信号を処理させ、プロセスによって特定の共有変数またはメモリを更新させるとします。シグナルハンドラ自体からそれを行うことはできますか?
ただし、pthreadを使用するスレッドの場合、それは実行可能ではないと思います。http://maxim.int.ru/bookshelf/PthreadsProgram/htm/r_40.html。この記事で述べたように、彼らはそれが非同期信号に対して安全ではないと述べており、そのためにsigwaitを使用することを提案しています。私はそれが非同期信号安全ではない理由ではありません。つまり、私はスレッドによってシグナルを処理し、シグナルハンドラルーティングに参加しています。共有メモリのロックを取得して更新します。その間に、同じタイプの別のシグナルが到着し、それを処理する別のスレッドがシグナルハンドラーを再度実行します。ここで、シグナルハンドラーはプロセスと同じですが、複数回呼び出されます。2回目は、ロックを確認できず、データを更新/上書きします。これは、共有データを使用するマルチスレッド信号ハンドラーの問題ですか。
私は少し混乱しています。マルチプロセスシステムでは、各プロセスのシグナルハンドラーのコピーがあります。しかし、マルチスレッドシステムでは、複数のスレッドで使用されるシグナルハンドラーの単一のコピーがありますね。したがって、同じタイプの複数のシグナルが到着し、それを処理する2つのスレッドがある場合、両方が同じハンドラーコードを実行しようとしますか?それはどのように適合しますか?