#include int sigsuspend(const sigset_t *mask);
sigsuspend函式是等待某個訊號到達,然後呼叫處理函式之後才返回的,否則會處於阻塞等待狀態。unix環境高階程式設計的sleep函式就是通過alarm函式和sigsuspend函式來實現的。
但是當我自己寫了乙個程式的時候,執行緒呼叫unix環境高階程式設計實現的sleep函式竟然老是一睡不醒,除錯發現原來sigsuspend函式不可以用在新建執行緒,而用在控制線程或者程序就行。**如下:
void sig_print(int signo)
void test_suspend()
現
pthread_t tid1;
void *
thr_fn1(void *arg)
intmain(void)
執行結果:[root@localhost threads]# ./exitstatus thread 1 returningalarm signo
表明執行緒執行,呼叫test_sigsuspend函式,在該函式裡啟動2s定時,並在sigsuspend函式阻塞。時間到呼叫sigalrm訊號處理函式,但是sigsuspend函式沒有返回(沒有列印sigsuspend return),這樣執行緒就一直堵住不動。
如果把test_sigsuspend函式搬到主線程
int
main(void)
就可以:
[root@localhost threads]# ./exitstatus
thread 1 returning
alarm signo
sigsuspend return
對於新建執行緒要達到sigsuspend函式的效果,就是使用sigwait函式,**:
#include #include #include pthread_t tid1, tid2;
sigset_t mask;
void sig_print(int signo)
void test_sigwait()
}void *
thr_fn1(void *arg)
intmain(void)
執行結果:
[root@localhost threads]# ./exitstatus
thread 1 returning
sigwait return
alarm signo
結論:sigsuspend函式用於執行緒或者主線程,sigwait函式用於新建執行緒。
sigsuspend 函式 解釋
sigsuspend函式作用 如果在等待訊號發生時希望去休眠,則使用sigsuspend函式是非常合適的 標頭檔案 include 乙個保護臨界區 的錯誤例項 sigprocmask 和pause 實現 include include include void handler int sig 訊號處...
sigsuspend 函式作用詳解
看到網上大部分解釋都是抄來抄去的,結果說不清楚,最後還是不理解,於是花了幾個小時研究了下,感覺大體上明白了。希望本文能對你有用處。1 標頭檔案 include 2 乙個保護臨界區 的錯誤例項 sigprocmask 和pause 實現 include include include void han...
PC Lint和SI整合小問題
pc lint和sourceinsight的整合網上可以搜尋到一大堆的文件,但以前同事遇到個問題,在si裡執行pc lint後的結果頁裡,每個item前都會有乙個按鈕可以方便地鏈結到對應的 行。當時同事的所有配置和我的都一樣,但是他的結果頁就是沒有那個按鈕,最好鬱悶半天也沒解決。我這兩天也用pc l...