C++ 进程退出和对线程的影响

C++ 进程退出和对线程的影响,c++,linux,unix,process,operating-system,C++,Linux,Unix,Process,Operating System,在维护下,我看到项目代码(在linux上的c/c++中)在出现无法恢复的错误时调用libcexit函数。但是,此进程终止调用跨多个线程使用(每个线程都面临无法恢复的场景)。现在- 进程exit是否可以从主线程以外的线程调用,而不会产生任何副作用 无论何时调用exit(在主线程或任何其他线程中),它都能保证线程的正常退出 我知道标准(手册页)对此保持沉默,最好的方法是启动所有线程的正常终止,并使用通知机制,main必须通知线程正常终止。但是,由于它是一个正在维护的项目,所以在更改之前,您需要检

在维护下,我看到项目代码(在linux上的
c/c++
中)在出现无法恢复的错误时调用
libc
exit
函数。但是,此进程终止调用跨多个线程使用(每个线程都面临无法恢复的场景)。现在-

  • 进程
    exit
    是否可以从主线程以外的线程调用,而不会产生任何副作用
  • 无论何时调用
    exit
    (在主线程或任何其他线程中),它都能保证线程的正常退出
我知道标准(手册页)对此保持沉默,最好的方法是启动所有线程的正常终止,并使用通知机制,
main
必须通知线程正常终止。但是,由于它是一个正在维护的项目,所以在更改之前,您需要检查当前行为是否正确


我面临的问题是,我可以看到随机崩溃,其中一个线程正在执行
exit
调用执行的适当进程。

对于第一个问题,当您调用
exit
(从任何线程,主线程或子线程)时,进程立即退出


关于第二个问题,请参见上面的答案。简言之,不会。线程不会“优雅地”(无论如何从应用程序的角度)退出。

我同意你的观点,但在退出过程中,如果另一个线程正在执行,它会导致崩溃吗?在内核模式下退出是否确保其他线程被阻止?@kumar_m_kiran我认为没有指定线程将按特定顺序被杀死,因此我认为不太可能发生奇怪的事情。如果您可以复制崩溃,那么我建议您在调试器中运行应用程序,查看崩溃发生的时间和地点。我认为这样的“崩溃”很少见。在释放进程所拥有的资源之前,操作系统会停止所有内核上的所有线程,因此很难想出在进程终止期间可能引发任何类型故障的场景。“随机崩溃”-症状是什么,发生了什么不应该发生的事?