1

スレッドのシグナルマスクを別のスレッドから変更する方法はありますか? ミューテックス、セマフォ、条件変数を使用せず、シグナルのみを使用するマルチスレッド C アプリケーションを作成することになっています。

メイン スレッドは SIGUSR1 をそのプロセスに送信し、2 つのスレッドのうちの 1 つ (メイン スレッドを除く) がシグナルに応答し、SIGUSR1 を sigmask からブロックしてスリープします。次に、メインスレッドが再び SIGUSR1 を送信すると、他のスレッドが応答し、その sigmask から SIGUSR1 をブロックし、他のスレッドの sigmask から SIGUSR1 のブロックを解除するため、再び SIGUSR1 に応答します。

したがって、基本的に、メイン スレッドが SIGUSR1 を送信するたびに、他の 2 つのスレッドが互いにスワップします。

誰か助けてくれませんか?

4

2 に答える 2

1

pthread_sigqueue(3)おそらく、メインスレッドから、または子スレッドで呼び出されるsigwait(3)ことを探していsigtimedwait(2)ます。

于 2012-10-28T23:11:18.983 に答える
0

スレッドは、( 経由で) 自身のシグナル マスクのみを変更できますpthread_sigmask()。別のスレッドのシグナル マスクを変更する場合は、自分でコードを記述して、別のスレッドに変更を依頼する必要があります。

ここでシグナルがプロセスに送信されているため、使用する機能はkill()orです。sigqueue()後者は、 で発生する可能性のある複数の信号を一緒に結合することを回避しkill()ます。

于 2012-10-29T17:11:40.720 に答える