作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个多线程程序,它需要每 25 毫秒处理一次由 setitimer() 发送的 Linux 信号 SIGVTALRM。但是我很困惑。我不知道为什么我需要使用 Pthread_sigmask() 来阻止和解除阻止信号。无论在给定的时刻正在处理哪个线程,信号在发送时都不会被处理吗?
最佳答案
Won't the signal be handled anyway when it is sent, regardless of which thread is processing at the given time instant?
在单线程程序中,是的。但是在多线程程序中,POSIX 没有指定哪个线程将接收您发送的信号 SIGVTALRM
。因此,pthread_sigmask()
通常用于阻止感兴趣的信号并处理获取这些信号 sigwait()
在专用线程中。这可能是您使用或要求使用 pthread_sigmask()
的原因。
链接的 POSIX 手册还提供了一个简单示例,说明如何完成此操作。
关于c++ - 为什么我需要在多线程程序中使用 Pthread_sigmask 来确保设置处理程序正在处理信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41026184/
我是一名优秀的程序员,十分优秀!