我正在处理一个项目,其中我们使用了pthread_create创建了几个子线程。
线程创建逻辑不在我的控制范围内,因为它是由项目的其他部分实现的。
每个线程执行一些需要超过30秒才能完成的操作。在正常情况下,程序可以正常运行。 但是,在程序终止时会出现问题。当我收到SIGINT信号时,我需要尽快从主函数中退出。
当我调用exit()或从main函数返回时,将调用退出处理程序和全局对象的析构函数。我认为这些操作与运行中的线程存在竞争条件。而且我认为有许多竞争条件,这使得很难解决所有这些问题。我觉得有两种解决方法:
我已经阅读了这篇文章,请让我知道您是否了解其他方法:POSIX API调用以列出在进程中运行的所有pthread 此外,请让我知道是否还有其他解决方案。
每个线程执行一些需要超过30秒才能完成的操作。在正常情况下,程序可以正常运行。 但是,在程序终止时会出现问题。当我收到SIGINT信号时,我需要尽快从主函数中退出。
当我调用exit()或从main函数返回时,将调用退出处理程序和全局对象的析构函数。我认为这些操作与运行中的线程存在竞争条件。而且我认为有许多竞争条件,这使得很难解决所有这些问题。我觉得有两种解决方法:
- 调用_exit()并忘记所有资源的释放
- 当收到SIGINT信号时,关闭/杀死所有线程,然后从主线程调用exit(),这将释放资源。
我已经阅读了这篇文章,请让我知道您是否了解其他方法:POSIX API调用以列出在进程中运行的所有pthread 此外,请让我知道是否还有其他解决方案。
_exit()
或SIGKILL
也是无法安全运行的。停电和硬件故障是生活中的事实,如果一个进程无法安全地处理这些问题,那么它就不够强大,不能被信任。如果您无法在任何时候使用SIGKILL
关闭应用程序,那么您打算如何处理下一次停电、磁盘故障或 RAM 芯片失灵?希望它不会发生并不是一个计划。 - Andrew Henle