在多线程上下文中断言()安全性

时间:2014-11-20 12:04:37

标签: c multithreading pthreads

所以我似乎无法找到有关assert在多线程上下文中是否可用的可靠信息。

逻辑上对我来说,如果一个断言失败,线程会被关闭而不是其他线程吗?

或整个过程是否会被杀死?

基本上我的问题。在没有泄漏资源的情况下在多线程环境中使用assert是否安全?

2 个答案:

答案 0 :(得分:5)

如果您看到assert()的{​​{3}},则会明确说明,

  

这个宏的目的是帮助程序员找到他的错误   程序。消息“文件foo.c中的断言失败,函数   do_bar(),第1287行“对用户毫无帮助。

这意味着,它只在开发环境中有用[并且应该使用],而不是在生产软件中。 IMO,在开发阶段,您不必担心由leak引起的assert()。 YMMV。

完成代码调试后,您可以通过定义[assert()] #define关闭 {/ 1}}功能。

答案 1 :(得分:3)

我说的不仅仅是。如果我看到没有断言的多线程代码,我就不相信它。如果你将其实现简化为:

#define assert(x) if( !(x) ) abort()

您会发现它对线程安全或线程特定没有任何特殊之处。您有责任提供无竞争条件,如果断言失败,整个过程就会中止。