linux中向某個線程發送信號,若沒有對該信號的處理函數,則會導致程序結束。
如下面的程序,創建一個線程,主線程向其發送一個信號,會導致程序立即結束
#include <stdio.h> #include <pthread.h> pthread_t t; void* run(void* arg) { while(1) { printf("Hello/n"); } } main() { pthread_create(&t, 0, run, 0); pthread_kill(t,34); while(1); }
這就要求利用pthread_kill 與 sigwait 通過等待信號來控制線程時應添加一個信號處理函數來實現對線程的控制
改進后的控制線程程序
#include <stdio.h> #include <pthread.h> #include <signal.h> pthread_t t1, t2; sigset_t sigs; void handle(int s) { } void* r1(void* arg) { int s; while(1) { printf("1/n"); sigwait(&sigs, &s); } } void* r2(void* arg) { while(1) { sleep(1); printf("2/n"); pthread_kill(t1, 34); } } main() { signal(34, handle); sigemptyset(&sigs); sigaddset(&sigs, 34); pthread_create(&t1, 0, r1, 0); pthread_create(&t2, 0, r2, 0); while(1); }
部分效果
新聞熱點
疑難解答
圖片精選