我正在开发一个Linux应用程序,它需要能够处理大量的信号。尽管信号处理程序将运行得很快(我最多计划了数千个cpu周期),但信号将以大突发的形式出现,理想情况下,我将完全禁用信号掩蔽(即使不是主题,参见SA_NODEFER in )。因此,我需要以完全可重入的方式实现信号处理程序。我认为std::原子对这个任务是有用的,但是我认为,std::原子是为了处理基于线程的争用条件而开发的,而不一定是从信号处理程序堆叠而来的争用问题。
我需要使用用户空间线程库中的nanosleep函数来实现大致所需的等待,因为它可以在异步信号中断的情况下节省剩余时间。我使用SIGALRM来抢占地切换线程;因此,重要的是要考虑使用不可重入函数可能带来的副作用。因此,如果nanosleep调用被线程切换中断,并从另一个线程或信号处理程序再次调用,我想知道这种情况是否会导致问题。显然,as it is not listed here的nanosleep函数并不是异步信号安全的;然而,sleep(3)被认为是异步信号安全的。另一方面,sleep(3) seem