Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我需要在多线程程序中使用Pthread_sigmask来确保set处理程序正在处理信号?_C++_C_Linux_Multithreading_Signals - Fatal编程技术网

C++ 为什么我需要在多线程程序中使用Pthread_sigmask来确保set处理程序正在处理信号?

C++ 为什么我需要在多线程程序中使用Pthread_sigmask来确保set处理程序正在处理信号?,c++,c,linux,multithreading,signals,C++,C,Linux,Multithreading,Signals,我有一个多线程程序,它需要处理setitimer()每隔25毫秒发送的Linux信号SIGVTALRM。然而,我感到困惑。我不知道为什么需要使用Pthread_sigmask()来阻止和解除阻止信号。不管在给定的时刻哪个线程在处理信号,发送信号时不会处理它吗 不管在给定的时刻哪个线程在处理信号,发送信号时不会处理它吗 在单线程程序中,是的。但是在多线程程序中,POSIX没有指定哪个线程将接收您发送的信号。因此,通常用于阻止感兴趣的信号,并在专用线程中处理获取这些信号。这可能就是您正在使用或被要求

我有一个多线程程序,它需要处理setitimer()每隔25毫秒发送的Linux信号SIGVTALRM。然而,我感到困惑。我不知道为什么需要使用Pthread_sigmask()来阻止和解除阻止信号。不管在给定的时刻哪个线程在处理信号,发送信号时不会处理它吗

不管在给定的时刻哪个线程在处理信号,发送信号时不会处理它吗

在单线程程序中,是的。但是在多线程程序中,POSIX没有指定哪个线程将接收您发送的信号。因此,通常用于阻止感兴趣的信号,并在专用线程中处理获取这些信号。这可能就是您正在使用或被要求使用
pthread\u sigmask()
的原因


链接的POSIX手册还提供了一个简单的示例,说明了如何做到这一点。

您能提供一个示例来说明您在说什么吗?谢谢您的回复!如果我在主线程中设置一个计时器,然后创建线程,那么如何决定哪个线程应该处理它呢?常用的方法是创建一个专用线程。查看哪里可以找到完整的示例。@lukecam95通过此线程了解pthread_sigmask的工作原理。