小编She*_*ode的帖子

如何从任何线程安全地使用 exit()

根据手册页 (2),该exit函数不是线程安全的: ,这是因为该函数尝试通过调用使用和MT-Unsafe race:exit注册的回调来清理资源(将数据刷新到磁盘、关闭文件描述符等...)。我希望我的程序能够做到这一点!(我的一个线程在整个程序的生命周期中保持文件描述符打开,所以这对我来说不是一个选择,因为我希望将所有数据写入输出文件)on_exitatexit_exit

我的问题如下:如果我很小心并且我不在线程之间共享任何敏感数据(如 fd),那么exit在多线程程序中调用是否“可接受”?请注意,我仅exit在发生不可恢复的错误时才调用。然而,当程序尝试退出时,我无法承受段错误。问题是,任何线程都可能发生不可恢复的错误......

我正在考虑使用 setjmp/longjmp “很好地”终止我的线程,但这会非常复杂,并且需要在我的代码中进行许多更改。

任何建议将不胜感激。谢谢 !:)

编辑:感谢@Ctx启发,我想出了以下想法:

#define EXIT(status) do { pthread_mutex_lock(&exit_mutex); exit(status); } while(0)

当然,exit_mutex 必须是全局的(外部)。

c multithreading stdio atexit thread-safety

8
推荐指数
1
解决办法
2940
查看次数

标签 统计

atexit ×1

c ×1

multithreading ×1

stdio ×1

thread-safety ×1