シグナルハンドラーの使用でこの問題が発生します。共有メモリを定義する親プロセスがあります。特定のタイプのシグナル用のシグナルハンドラーを持つ2つの子プロセスをフォークします。これで、子プロセスがその特定のシグナルを受信するたびに、それらのシグナルハンドラーがそのシグナルを処理します。
ここで必要なのは、シグナルハンドラーによってシグナルが処理される回数を追跡することです。その共有メモリを使用して、いずれかの子プロセスによってシグナルが処理される回数だけカウンターをインクリメントする必要があります
そのためには、セマフォを使用する必要があるかもしれません。しかし、私の質問は、シグナルがハンドラーによって処理されるときはいつでも、共有メモリがアクセスされているかどうかをチェックする必要があり、アクセスされている場合はカウンターをインクリメントできないため、ブロックする必要があるかもしれません。シグナルハンドラーでブロックできるとは思いません。
それで、これを達成するための最良の方法は何ですか。私の子プロセスは両方とも、タイプ1のシグナルを処理するために同じシグナルハンドラーを登録します。したがって、その特定のシグナルが受信されるたびに、同じシグナルハンドラールーチンの両方がカウンターをインクリメントしようとします。
これを達成する方法は?