UNIX中多个线程同时捕捉信号,信号由那个线程捕捉到?
我有这么一个程序:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <signal.h>
pthread_key_t key;
pthread_once_t init_done = PTHREAD_ONCE_INIT;
void * thread_func(void *arg);
void thread_ini();
void sig_hdl(int signo)
{
pthread_t tid;
tid = (pthread_t)pthread_getspecific(key);
printf("thread %d caught signal.\n",tid);
}
void thread_ini()
{
/*
struct sigaction act,oact;
act.sa_handler = sig_hdl;
sigaction(SIGUSR1,&act,&oact);*/
pthread_key_create(&key,NULL);
}
void *thread_func(void *arg)
{
pthread_t tid;
int i;
struct sigaction act,oact;
pthread_once(&init_done,thread_ini);
act.sa_handler = sig_hdl;
sigaction(SIGUSR1,&act,&oact);
tid = pthread_self();
printf("thread %d created.\n",tid);
pthread_setspecific(key,(void *)tid);
for(;;)
pause();
}
int main(int argc, char *argv[])
{
pthread_t ntid;
pthread_t mtid;
pthread_create(&ntid,NULL,thread_func,NULL);
pthread_create(&mtid,NULL,thread_func,(void*)1);
pthread_join(ntid,NULL);
pthread_join(mtid,NULL);
return 0;
}
向这个程序发SIGUSR1信号为什么只有线程1捕捉到,线程2从来没有捕捉到过

