pet*_*ica 3 c++ linux posix reentrancy c++11
我正在开发一个Linux应用程序,它需要能够处理大量信号.虽然信号处理程序运行速度很快(我计划最多几千个cpu周期),但信号会突然爆发,理想情况下我会完全禁用信号屏蔽(即使不是自己,也请参见sigaction中的 SA_NODEFER ).
因此,我需要以完全可重入的方式实现信号处理程序.我认为std :: atomic对于任务来说是一个有用的东西,但我认为,std :: atomic是为处理基于线程的竞争条件而开发的,而不一定是来自堆叠在信号处理程序上的竞争问题.
如果is_lock_free是,true那么你没问题,否则如果在主线程和信号处理程序中访问相同的原子变量,或者在更低和更高优先级的信号处理程序中访问,你就会死锁:记住它们都共享一个堆栈而且没有办法运行处理程序让它被中断的代码会持续足够长的时间来解锁资源(不需要简单地返回而不做自己的工作).
| 归档时间: |
|
| 查看次数: |
1681 次 |
| 最近记录: |