c++ - 信号处理程序异步安全功能

标签 c++ c function c++11 signals

有没有一种方法可以从信号处理程序中调用非异步安全函数?或者这是不可能的?

我并不是要在信号处理程序中设置一个标志,然后在我的“主代码”中打印一些东西,但在这种情况下,信号处理程序将自己定义我的程序的逻辑流程。

最佳答案

从技术上讲,您可以在信号处理程序中调用或编写任何函数,没有什么可以阻止您这样做。

之所以不鼓励,是因为当信号处理程序正在处理您的操作时,可能会引发另一个信号,这可能会使信号处理程序跳转到更高优先级的信号处理程序。

这种情况会导致竞争和难以调试的问题,因为我们不知道信号处理的顺序。

这就是为什么信号处理程序应该是轻量级的,以避免难以调试的竞争条件,通常我们设置标志以指示信号已被引发并在读取这些标志的主线程或另一个线程中处理它。

关于c++ - 信号处理程序异步安全功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34465275/

相关文章:

c++ - 使用 libgpiod 如何即时切换请求行的方向?

c - C 中的数字时钟 - 如何更新秒数?

python - 如何使用 ctypes 从 Python 代码中获取 char 指针的值

c - 将 PTX 程序直接传递给 CUDA 驱动程序

javascript - Javascript 中的函数声明

javascript - Codewar 挑战 JavaScript

c - 使用数组作为函数参数

c++ - Qt,使用OpenGL,QGLWidget是私有(private)的

c++ - SEH(结构化异常处理)机制在ARM上究竟是如何工作的?

python - DFS中c++和Python的区别