sigprocmask fn を使用するマルチスレッド コードがあります。この呼び出しの使用は、マルチスレッド プログラムでは指定されていないことがわかっているので、この呼び出しを削除します。ただし、私が直面している問題は、この関数が呼び出されるとメイン スレッドが停止することです。なぜこれが起こるのか理解したい。この関数の呼び出しがコメント化されている場合、メイン スレッドは正常に実行されます。
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 done" が出力されます。sigprocmask を使用するとスレッドがスタックするのはなぜですか?
この fn を呼び出した後の InitModule の残りのコードは常に実行されることに注意してください。呼び出し元の関数に戻ったときにのみ、スタックします。