我有一个多线程程序,需要每隔25ms处理一个setitimer()发送的Linux信号SIGVTALRM。不过我很困惑。我不知道为什么我需要使用Pthread_sigmask()来阻止和解锁信号。无论在给定的时刻处理哪个线程,无论如何都不会在发送信号时处理信号?
答案 0 :(得分:1)
无论在给定的时刻处理哪个线程,都不会在发送信号时处理信号?
在单线程程序中,是的。但是在多线程程序中,POSIX没有指定哪个线程会收到您发送的信号SIGVTALRM
。因此,pthread_sigmask()
通常用于阻止感兴趣的信号并处理在专用线程中获取那些信号sigwait()
。这可能是您使用或要求使用pthread_sigmask()
的原因。
链接的POSIX手册还提供了一个简单的示例,说明了如何做到这一点。