Я хочу транслировать сигнал из одного потока всем другим потокам в процессе. Потоки, принимающие этот сигнал, должны обрабатывать сигнал в обработчике сигналов. Как мне этого добиться?
Я попробовал следующий код, но он завершается печатью пользовательского сигнала 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;
}