许多 POSIX 阻塞函数在有信号的情况下返回 EINTR。这个想法是信号处理程序首先设置一个标志(在 SIGINT 的情况下说“停止”标志),然后阻塞函数解除阻塞返回 EINTR 并且应用程序看到该标志并执行有序关闭(或其他)。

但是,某些阻塞函数(如 pthread_mutex_lock 和 pthread_cond_wait)没有 EINTR 错误。

这背后的想法是什么?使用这些函数的应用程序应该如何处理信号(特别是 Ctrl+C)?

最佳答案

没有答案。我的假设是 pthread_cond_wait() 和 SIGINT 不能结合来执行干净的关闭。使用 sem_wait() 或类似方法代替 pthread_cond_wait()。

关于signals - 阻塞函数和 EINTR,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13128538/

10-16 18:40