0

我正在从内核空间中的模块向进程发送信号。这个进程有一个线程等待信号。

我阅读了信号手册,它说:信号处置是每个进程的属性:在多线程应用程序中,包括信号的处置对于所有线程都是相同的。

因此,根据手册 pthread_sigmask: http: //man7.org/linux/man-pages/man3/pthread_sigmask.3.html

我试图通过调用来阻止应用程序主函数中的信号:

siginfo_t infoh1;
sigset_t waith1;

sigemptyset(&waith1);
sigaddset(&waith1, SIG_HILO1);
pthread_sigmask( SIG_BLOCK, &waith1, NULL );

请注意,线程正在其执行函数中等待它。

result = sigwaitinfo (&waith1, &infoh1);

信号已发送,但线程从未收到它(它挂起等待)。

我究竟做错了什么?我用来自不同网站的不同代码进行了测试,但没有成功。

4

1 回答 1

2

我在我的 *nix 代码中使用了很多信号,我认为这不是一个好方法。

我建议所有线程都设置为忽略信号。主进程处理信号,而线程位于互斥体/条件上。在收到信号时,主进程使用信号类型设置一个全局静态标志,然后通知线程,该线程适当地检查该标志以查看哪个信号被捕获。

这是一个安全且简单的解决方案。

于 2013-10-11T21:57:38.157 回答