#include #include pthread_t td1, td2, td3; void handler(int sig) { write(1, "sigusr1\n", 8); } void *t1(void *a) { int i; for (i = 0; i < 10; ++i) sleep(1); printf("t1 exit...\n"); return (0); } void *t2(void *b) { int ret; ret = pthread_join(td1, NULL); printf("pthread_join returns: %d\n", ret); return (0); } int main() { struct sigaction sa; int i; sa.sa_flags = 0; /* interrupt */ sa.sa_handler = handler; sigemptyset(&sa.sa_mask); sigaction(SIGUSR1, &sa, NULL); pthread_create(&td1, NULL, t1, NULL); pthread_create(&td2, NULL, t2, NULL); for (i = 0; i < 10; ++i) { pthread_kill(td2, SIGUSR1); sleep(1); } pthread_join(td2, NULL); return (0); }