sigprocmask fn을 사용하는 다중 스레드 코드가 있습니다. 이 호출의 사용은 알 수없는 멀티 스레드 프로그램에서 알려져 있지 않으며이 호출을 제거합니다. 그러나, 내가 직면하고있는 문제는이 함수가 호출되면 내 메인 스레드가 멈추는 것입니다. 왜 이런 일이 일어나는지 이해하고 싶습니다. 이 함수에 대한 호출이 주석 처리되면 주 스레드가 잘 실행됩니다.sigprocmask로 인해 주 프로세스가 중단되었습니다.
Init 내 주 프로그램에서 몇 개의 스레드 풀이 생성됩니다. 그런 다음 InitModule fn이 호출되는 TestFunction 함수를 호출합니다. InitModule에서 sigprocmask가 호출 된 다음 다른 초기화가 수행됩니다. 그런 다음 함수는 TestFunction으로 리턴합니다. 이것은 막힌 곳입니다. 내가 InitModule에서 sigprocmask() 호출을 제거하면
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.....
}
을 다음과 같이
사용은 그때 "DoSomethingElse 완료"인쇄를 얻을 수있다. 어떻게 sigprocmask를 사용하면 스레드가 멈추는가?
이 fn을 호출 한 후 InitModule의 나머지 코드는 항상 실행된다는 점에 유의하십시오. 내가 전화 기능으로 돌아 왔을 때, 그것이 막혀있는 곳.