Linux線程同步之旌旗燈號C說話實例。本站提示廣大學習愛好者:(Linux線程同步之旌旗燈號C說話實例)文章只能為提供參考,不一定能成為您想要的結果。以下是Linux線程同步之旌旗燈號C說話實例正文
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); }
部門後果