2008-11-24 78 views
7

我们一直在试图在我们的多线程C++应用程序中搜索一些堆腐败问题。作为一种技术,我们尝试将add -lmcheck添加到应用程序的库行。这导致应用程序以相对较短的顺序崩溃并出现明显的堆损坏。glibc的'-lmcheck'选项和多线程

我们的应用程序确实使用malloc/free和new/delete(如适用)。

我们的一个团队想知道-lmcheck是否实际上是线程安全的,并且在所有malloc /免费调用周围放置了一个互斥锁。碰撞消失了。

有谁知道如果-lmcheck应该支持多线程?我想知道我们是否误解了我们正在尝试使用的工具,从而导致我们不必担心。

回答

7

不,mcheck不是线程安全的,不应与多线程应用程序一起使用。这样做会引入额外的问题,因为线程之间没有同步。下面是几个月前Ulrich Drepper(glibc维护人员)就此问题所作的回复:

mcheck不适用于多线程代码。它不可能 可能。没有办法修复 这与技术基础 mcheck。

+0

有趣。这是否意味着提问者的“修复”虽然似乎阻止了崩溃,但实际上并非有效,并且该修改无法帮助他进行申请? – 2008-11-24 18:36:48

0

作为一种替代方案,我可以强烈推荐valgrind - 它将与多线程应用程序一起工作 - 虽然它模拟线程,但实际上本身并不使用线程。