マルチスレッドのプログラミング

同期シグナル

トラップ (SIGILLSIGFPE SIGSEGV など) は、ゼロ除算を行なったり、存在しないメモリーを参照したりすることによって、スレッド自体が発生させるものです。トラップは、そのトラップを発生させたスレッドだけが処理します。プロセス内の複数のスレッドが、同じ種類のトラップを同時に発生させて処理することもできます。

同期的に生成されたシグナルに関しては、シグナルの概念を個々のスレッドに簡単に拡張できます。シグナルハンドラは、同期シグナルを生成したスレッド上で起動されます。

しかし、適切なシグナルハンドラが設定されていない場合、そのプロセスはトラップに対応できません。その場合は、トラップが発生すると、問題を起こしたスレッドが生成されたシグナルをブロックしても、デフォルトの処理が適用されます。このようなシグナルのデフォルトの処理では、プロセスの終了に通常コアダンプを伴います。

同期シグナルは通常、スレッドだけでなく、プロセス全体に悪影響を及ぼすような重大な事態を意味するので、プロセスを終了させた方がよい場合が多くあります。