gpt4 book ai didi

linux - sigprocmask 导致主进程卡住

转载 作者:太空宇宙 更新时间:2023-11-04 04:27:43 24 4
gpt4 key购买 nike

我有使用 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.....

}

如果我从 InitModule 中删除 sigprocmask() 调用,那么我会得到“DoSomethingElse done”打印。使用 sigprocmask 如何导致线程卡住?

请注意,调用此 fn 后 InitModule 中的其余代码始终会执行。只有当我返回到调用函数时,它才会被卡住。

最佳答案

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

关于linux - sigprocmask 导致主进程卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7173609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com