/* * Exemplo de uso de threads e sinais. * Uma thread pode enviar um sinal SIGUSR1 para a outra? */ #include #include #include #include #include void trata_SIGUSR1 (int sig) { psignal(sig, "InĂ­cio"); printf("%p\n", (void*) &sig); psignal(sig, "Fim "); } void* f_thread0(void *v) { sigset_t unblock_sigusr1; sigemptyset(&unblock_sigusr1); sigaddset (&unblock_sigusr1, SIGUSR1); pthread_sigmask (SIG_UNBLOCK, &unblock_sigusr1, NULL); sleep(3); printf("Thread 0 aguardou o sinal.\n"); return NULL; } void* f_thread1(void *v) { sleep(1); raise(SIGUSR1); printf("Thread 1 enviou sinal.\n"); return NULL; } int main (void) { sigset_t block_sigusr1; pthread_t thr0, thr1; signal(SIGUSR1, trata_SIGUSR1); sigemptyset(&block_sigusr1); sigaddset (&block_sigusr1, SIGUSR1); sigprocmask (SIG_BLOCK, &block_sigusr1, NULL); pthread_create(&thr0, NULL, f_thread0, NULL); pthread_create(&thr1, NULL, f_thread1, NULL); raise(SIGUSR1); pthread_join(thr0, NULL); pthread_join(thr1, NULL); return 0; }