天天看點

多線程對信号的接受處理

最近剛從linux C轉做android,老大突然看着我閑,叫我去驗證一下“一個程序有多個子線程,子線程都注冊監聽某個信号,另一個程序向它發送該信号的時候,它會怎麼處理?”。

帶着這個問題,我搜尋了各個貼子之後,大概得出:

程序處理信号,你需要注冊signal的一個處理函數,線程你需要用signal_wait去等待一個信号。大體得出,如果一個多線程的程序得到了信号,它是會在它諸多子線程裡面選一個來執行,有人說是正在進行的那個線程。在多線程環境下,一般會讓其他子線程不處理信号,專門用一個線程來處理信号,把異步變成同步處理。

光看人家的貼子是不行的的。為此,我寫了如下代碼來驗證:

上述代碼的輸出是,誰最後調用signal,誰就會一直處理該信号。

說明,跟正在執行的線程沒關系,指定一個之後就會一直由它來處理。如果對一個信号注冊了多次,那麼最後一次有效,其他的都無效。

mark一下。

繼續閱讀