1

1-UNIX シグナルの送信はプロセスに対してのみ可能ですか、それともスレッドにシグナルを送信することも可能ですか?

2-スレッドの tid をカーネル モジュールに送信することは可能ですか? どのように?

3-カーネルモジュールがスレッドのtidを見つけてシグナルを送信する方法は?

4-スレッドには、各シグナルで実行されるハンドラーがあります。各ハンドラがシグナルに対応している場合、競合状態はありますか? すべてのスレッドにシグナルを伝達できますか? 一度にすべてのハンドラーにアクセスするとどうなりますか?

4

1 に答える 1

1

Ad.1 どこから信号を送りますか? kill()シグナルをプロセスに送信したり、スレッドに送信したりするために使用できpthread_kill()ます (ただし、スレッドを作成したプロセスからのみ)。

Ad.3。1 つのシグナルを処理している間、他の保留中のシグナルがキューに入れられるため、競合状態は発生しません。ただし、ハンドラで使用される非ローカル変数をアトミックに設定する必要があります(したがって、割り込みが発生しても、この変数の設定は中断されません)、どの関数がハンドラセーフであるかを確認します。

シグナルとスレッドについて - シグナルは通常、直接処理されます (pthread_killユーザー空間からスレッドにシグナルを送信できる場合のみ)。マルチスレッド プロセスがあり、このシグナルがブロックされているスレッドがない場合、シグナルはランダム スレッド (シグナルが来たときに正確に実行されているスレッド) に送られます。1 つを除くすべてのスレッドをブロックすると、シグナルはこの 1 つのスレッドにのみ送信されます。

于 2013-09-17T13:07:13.637 に答える