由於程序中所有執行緒共享該程序訊號,所以執行緒庫將根據執行緒掩碼決定把訊號傳送給哪個具體的執行緒。因此在每個子執行緒中都單獨設定訊號掩碼,就很容易導致邏輯錯誤。此外,所有執行緒共享訊號處理函式。也就是說,乙個執行緒中設定了某個訊號的訊號處理函式後,它將覆蓋其他執行緒為同乙個訊號設定的訊號處理函式。所以應該定義乙個專門的執行緒來處理所有的訊號。
(1)在主線程建立出其他子執行緒之前呼叫pthread_sigmask來設定好訊號掩碼,所有新建立的子執行緒都將自動繼承這個訊號掩碼。這樣做之後,實際上所有執行緒都不會響應被遮蔽的訊號了。
(2)在某個執行緒中呼叫如下函式來等待訊號並處理之:
#include
int sigwait(const sigset_t * set,int *sig);
set引數指定需要等待的訊號的集合。引數sig指定的整數用於儲存該函式返回的訊號值。成功時返回0,失敗則返回錯誤碼。
#include #include #include #include #include #include /* ****** error handling functions */
#define handle_error_en(en, msg) \
do while (0)
static void *sig_thread(void *arg)
}static void handler(int arg)
int main(int argc, char *argv)
Linux中線程與程序的區別
自 linux有兩種不同的函式來建立程序 fork函式,vfork函式。兩個函式都是從父程序拷貝出乙個新程序,但是也有區別。下面是fork和vfork的定義。定義於中。本段 源於kernel 4.4版本。fork系統呼叫 syscall define0 fork syscall define0 vf...
linux中線程相關函式
linux中線程相關函式 2010年03月09日 星期二 22 18 1.比較兩個執行緒 id 是否一致。執行緒id 使用 pthread t 資料型別來表示。linux 使用 unsigned long int 表示pthread t 資料型別。solaris 9 把 pthread t 資料型別...
Linux中線程與CPU核的繫結
最近在對專案進行效能優化,由於在多核平台上,所以了解了些程序 執行緒繫結cpu核的問題,在這裡將所學記錄一下。不管是執行緒還是程序,都是通過設定親和性 affinity 來達到目的。對於程序的情況,一般是使用sched setaffinity這個函式來實現,網上講的也比較多,這裡主要講一下執行緒的情...