OpenGroup Unix规范索赔要求 pthread_kill()是异步信号安全的.但是Linux man 7信号并没有在相关部分列出这个函数。
那么,在Linux上的信号处理程序中调用pthread_kill安全吗?我知道它是用tgkill()实现的(这是安全的.但这并不能自动保证pthread_kill()的安全性)。
一些背景:
O_ASYNC/F_SETOWN_EX/F_SETSIG将SIGRTMIN信号定向到I/O准备就绪的特定线程。sigwaitinfo() )。编辑:信号处理线程将接收到的SIGIO视为“我们有活动,但不知道在哪里--检查每个文件描述符”。不太理想,但总比完全错过信号好。
编辑2:必须对设计进行一点更新(出于某种无法理解的原因,我认为SIGIO是一个实时信号)。
发布于 2018-07-24 18:23:52
在这里总结克雷格·埃斯蒂的答案(谢谢,伙计!):
在所有(最近的)手册页中,pthread_kill被列为异步信号安全。在glibc的来源中有一条评论声称在fork()的存在下它是不安全的,所以如果你感到偏执,你可以使用tgkill(getpid(), <thread-id>, <signal-id>)。
所以,是的-- pthread_kill和tgkill都会没事的。
在我的CentOS 7中,man没有列出任何一个安全性,但这很可能是因为它太老了。
https://stackoverflow.com/questions/51485203
复制相似问题