linux中向某個線程發(fā)送信號,若沒有對該信號的處理函數(shù),則會導(dǎo)致程序結(jié)束。
如下面的程序,創(chuàng)建一個線程,主線程向其發(fā)送一個信號,會導(dǎo)致程序立即結(jié)束
#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 通過等待信號來控制線程時應(yīng)添加一個信號處理函數(shù)來實現(xiàn)對線程的控制
改進后的控制線程程序
#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); } 部分效果
![]()
新聞熱點
疑難解答
圖片精選