あるスレッドからプロセス内の他のすべてのスレッドにシグナルをブロードキャストしたい。そのシグナルを受け取ったスレッドは、シグナルハンドラ内のシグナルを処理する必要があります。どうすればこれを達成できますか?Linuxのすべてのスレッドにシグナルをブロードキャスト
私は、次のコードを試してみましたが、それは何が起こっているユーザー定義信号1を印刷して終了しますか?
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <pthread.h>
const int NTHREADS = 4;
long prev_fact, i;
void SIGhandler(int);
void SIGhandler(int sig)
{
printf("\nThread %lx Received a SIGUSR1.\n", pthread_self());
}
void* tfunc(void* arg)
{
printf("Thread %lx executing...\n", pthread_self());
while(1)
;
}
int main()
{
int i;
pthread_t t[NTHREADS];
for(i = 0; i < NTHREADS; i++)
pthread_create(&t[i], NULL, tfunc, NULL);
for(i = 0; i < NTHREADS; i++)
pthread_kill(t[i], SIGUSR1);
for(i = 0; i < NTHREADS; ++i)
pthread_join(t[i], NULL);
return 0;
}
これは、あなたがこれを書いたのと同じ方法で、メインスレッド自体にシグナルを出さないことに注意してください(メインスレッドで 'pthread_self()'を使ってスレッドハンドルを取得します)。 – caf