std :: atomic信号安全吗?

时间:2015-09-02 09:21:07

标签: c++ linux c++11 posix reentrancy

我正在开发一个Linux应用程序,它需要能够处理大量信号。虽然信号处理程序运行速度很快(我计划最多几千个cpu周期),但信号会突然爆发,理想情况下我会完全禁用信号屏蔽(即使不是自己,请参见sigaction中的SA_NODEFER)。

因此,我需要以完全可重入的方式实现信号处理程序。我认为std :: atomic对于任务来说是一个有用的东西,但我认为,std :: atomic是为处理基于线程的竞争条件而开发的,而不一定是来自堆叠在信号处理程序上的竞争问题。

1 个答案:

答案 0 :(得分:6)

如果is_lock_freetrue,那么您就可以了,否则如果在主线程和信号处理程序中访问相同的原子变量,或者优先级越来越低,则可能会死锁信号处理程序:记住它们都共享一个堆栈,并且正在运行的处理程序无法让它被中断的代码持续足够长的时间来解锁资源(不需要简单地返回而不做自己的工作)。