C 如何在线程中等待信号?

C 如何在线程中等待信号?,c,linux,multithreading,kernel,signals,C,Linux,Multithreading,Kernel,Signals,我正在从内核空间中的模块向进程发送一个信号。此进程有一个线程等待信号 我读了信号手册,上面写着: 信号配置是每个进程的属性:在多线程应用程序中,所有线程的信号配置都是相同的 因此,根据手册pthread_sigmask: 我试图通过调用以下命令来阻止应用程序主功能中的信号: siginfo_t infoh1; sigset_t waith1; sigemptyset(&waith1); sigaddset(&waith1, SIG_HILO1); pthread_sigmas

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

我读了信号手册,上面写着: 信号配置是每个进程的属性:在多线程应用程序中,所有线程的信号配置都是相同的

因此,根据手册pthread_sigmask:

我试图通过调用以下命令来阻止应用程序主功能中的信号:

siginfo_t infoh1;
sigset_t waith1;

sigemptyset(&waith1);
sigaddset(&waith1, SIG_HILO1);
pthread_sigmask( SIG_BLOCK, &waith1, NULL );
请注意,线程正在其执行函数中等待它

result = sigwaitinfo (&waith1, &infoh1);
信号已发送,但线程从未接收到它(它挂起等待)


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

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

我建议将所有线程设置为忽略信号。当线程处于互斥/状态时,主进程处理信号。在信号上,主进程使用信号类型设置一个全局静态标志,然后通知线程,该线程会及时检查标志以查看捕获了哪个信号


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

非常感谢,我尝试向线程发送信号,但没有成功,我已经编写了一个类似于您描述的代码。从主进程(信号的处理程序到达),它向线程发送一个pthread_kill来通知某些信号已经到达。非常好,做得很好。请将我的回答设置为社区的答案。谢谢