2011-08-24 3 views
0

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의 나머지 코드는 항상 실행된다는 점에 유의하십시오. 내가 전화 기능으로 돌아 왔을 때, 그것이 막혀있는 곳.

답변

0

일부 Linux 스레드 라이브러리 구현은 othread_ * 기능을 구현하기 위해 스레드를 내부적으로 사용합니다. 빈 신호 마스크를 설정하려고합니다. 처음 3 개의 실시간 신호를 그대로 두십시오.

관련 문제