【发布时间】:2021-05-11 13:41:22
【问题描述】:
如何在信号处理程序中运行异步不安全代码。在我的情况下,我不能使用标志。我可以使用 longjmp 跳转到不同的上下文吗?
【问题讨论】:
-
您在寻找semaphore 吗? “sem_post() 是异步信号安全的:它可以在信号处理程序中安全地调用。”
-
我需要的是 pthread_mutex_lock 和 pthread_cond_signal
-
唉,“因此,互斥锁和条件变量不适合通过信号处理程序中运行的代码发出信号来释放等待线程。”。也许 semaphore + pthread_mutex 那么?
-
我找到了解决方案。冻结的线程在等待时不需要高效
-
对于您的问题,关于 longjump 的 ISO C:“由于它绕过了通常的函数调用和返回机制,longjmp() 应在中断、信号及其任何上下文中正确执行关联的函数。但是,如果从嵌套的信号处理程序(即,从作为在处理另一个信号期间引发的信号的结果调用的函数)调用 longjmp(),则行为未定义。"。因此,信号中的 OK,但不要嵌套。