sigprocmask导致主进程卡住

时间:2011-08-24 10:03:16

标签: linux sigprocmask

我有使用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中的其余代码。只有当我回到调用函数时,才会被卡住。

1 个答案:

答案 0 :(得分:0)

某些Linux线程库实现在内部使用线程在线程之间进行通信以实现othread_ *函数。您正在尝试设置空信号掩码。尝试留下前3个实时信号。