如何以线程安全的方式退出 C++03 中的程序?

How to exit a program in C++03 in a thread-safe manner?

我有一个多线程 C++03 应用程序(Linux-based),我想以线程安全的方式立即终止它。

我试过使用 exit(0) 但这会破坏一些正在被另一个线程主动使用的静态变量,导致该线程访问释放的内存和被破坏的对象,从而导致核心转储!显然 exit() 函数存在数据竞争:"Calling this function destroys all objects with static duration: A program with multiple threads running shall not call exit (see quick_exit for a similar function that does not affect static objects)."

C++11 提供线程安全的 quick_exit() 函数。但我目前没有能力将这个大型应用程序移动到 C++11。

我也不想花精力尝试清理 termination/joining 线程。这是一个非常复杂的程序,需要大量的工作。

还有其他选择吗?我只想让程序立即退出,没有清理,没有核心转储。

编辑:我真正想做的是用不会创建核心转储的东西替换 abort() 调用。并且 abort() 是线程安全的,顺便说一句。

您将通过调用 _exit(status) 获得您想要的效果(注意前导下划线)

文档:

http://man7.org/linux/man-pages/man2/_exit.2.html

不清楚你想终止什么:进程还是线程。终止进程和 return 控制权 OS 通常是安全的,但通过 "brute force" 终止线程通常不是一个好主意。原因是许多代码和库都是在假设 运行 在单线程环境中编写的。杀死一个线程会在 "quantum state" 中留下一些全局变量,这会导致其他线程中的代码 运行 出现问题。最好努力在上述代码中找到某个位置,然后礼貌地 "ask" 退出。