У меня есть многопоточный код, который использовал sigprocmask fn. Известно, что использование этого вызова не определено в многопоточной программе, которую я понимаю, и я удалю этот вызов. Однако проблема, с которой я сталкиваюсь, заключается в том, что мой основной поток застревает, если эта функция вызывается. Я хочу понять, почему это происходит. Если вызов этой функции закомментирован, то основной поток выполняется нормально.
В моей основной программе во время Init создано несколько пулов потоков. После этого я вызываю функцию TestFunction, из которой вызывается InitModule fn. В 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.....
}
Если я удаляю вызов sigprocmask () из InitModule, я получаю печать «DoSomethingElse done». Как использование sigprocmask приводит к зависанию потока?
Обратите внимание, что остальная часть кода в InitModule после вызова этого fn всегда выполняется. Только когда я вернусь к вызывающей функции, вот где она застревает.