0
我有使用sigprocmask fn的多線程代碼。它已知在多線程程序中未指定使用此調用,我明白,我將刪除此調用。但是,我面臨的問題是,如果調用此函數,我的主線程會卡住。我想明白爲什麼會發生這種情況。如果對這個函數的調用被註釋掉了,那麼主線程執行正常。sigprocmask導致主進程卡住
在Init中的主程序中,很少創建線程池。之後,我調用InitModule fn所調用的TestFunction函數。在InitModule中,調用sigprocmask,然後完成其他初始化。該函數然後返回到TestFunction。這是它卡住的地方。
的用法如下
InitModule()
{
sigset_t x;
sigemptyset (&x);
sigprocmask(SIG_SETMASK, &x, NULL)
// Config read, DS Init, etc ....
}
TestFunction()
{
// Code
InitModule();
malloc();
printf("malloc done"); // --> This line is printed
DoSomethingElse();
printf("DoSomethingElse done");// --> Never reaches this point.
// .... Remaining code.....
}
如果我從InitModule刪除sigprocmask()執行調用,然後我得到 「DoSomethingElse完成」 打印。 sigprocmask的用法如何導致線程卡住?
請注意,調用此fn後,InitModule中的其餘代碼始終執行。只有當我返回到調用函數,那是它卡住了。