#include #include #include #include #include int thread_counter; void process_signal_handler(int signum) { // printf("[signal handler] ALARM\n"); printf("[signal handler] thread id = %ld\n", pthread_self()); thread_counter++; } void * thread_entry_point(void * arg) { printf("[t1] thread id = %ld\n", pthread_self()); while (1) { if (thread_counter >= 10) break; } printf("[t1] bye\n"); pthread_exit(NULL); } int main() { printf("imposto il gestore di segnali\n"); if (signal(SIGUSR1, process_signal_handler) == SIG_ERR) { perror("signal"); exit(1); } printf("[main thread] thread id = %ld\n", pthread_self()); pthread_t t1; int res; res = pthread_create(&t1, NULL, thread_entry_point, NULL); if (res != 0) { perror("pthread_create"); exit(1); } for (int i = 0; i < 10; i++) { printf("%d...\n", i); sleep(1); if (pthread_kill(t1, SIGUSR1) != 0) { perror("pthread_kill"); } } sleep(1); printf("[main thread] bye\n"); return 0; }