所以我似乎无法找到有关assert在多线程上下文中是否可用的可靠信息。
逻辑上对我来说,如果一个断言失败,线程会被关闭而不是其他线程吗?
或整个过程是否会被杀死?
基本上我的问题。在没有泄漏资源的情况下在多线程环境中使用assert是否安全?
答案 0 :(得分:5)
如果您看到assert()
的{{3}},则会明确说明,
这个宏的目的是帮助程序员找到他的错误 程序。消息“文件foo.c中的断言失败,函数 do_bar(),第1287行“对用户毫无帮助。
这意味着,它只在开发环境中有用[并且应该使用],而不是在生产软件中。 IMO,在开发阶段,您不必担心由leak
引起的assert()
。 YMMV。
完成代码调试后,您可以通过定义[assert()
] #define
来关闭 {/ 1}}功能。
答案 1 :(得分:3)
我说的不仅仅是。如果我看到没有断言的多线程代码,我就不相信它。如果你将其实现简化为:
#define assert(x) if( !(x) ) abort()
您会发现它对线程安全或线程特定没有任何特殊之处。您有责任提供无竞争条件,如果断言失败,整个过程就会中止。