glibc的'-lmcheck'选项和多线程

时间:2008-11-24 18:11:15

标签: c++ multithreading glibc

我们一直在努力寻找多线程C ++应用程序中的一些堆损坏问题。作为一种技术,我们尝试将-lmcheck添加到应用程序的库行。这导致应用程序在相对较短的时间内以明显的堆损坏崩溃。

我们的应用程序确实同时使用malloc / free和new / delete(视情况而定)。

我们的一个团队想知道-lmcheck是否实际上是线程安全的,并且在所有malloc / free调用中都放置了一个互斥锁。崩溃消失了。

有没有人知道-lmcheck是否应该支持多线程?我想知道我们是否只是误解了我们试图使用的工具,从而导致我们不必要的担心。

3 个答案:

答案 0 :(得分:7)

不,mcheck不是线程安全的,不应该与多线程应用程序一起使用。这样做会引入其他问题,因为线程之间没有同步。以下是几个月前Ulrich Drepper(glibc维护者)对此主题的回应:

  

mcheck不适用于多线程代码。这不可以   可能。没有办法解决   这与技术底层   mCheck操作。

答案 1 :(得分:2)

在我们花时间愚弄它之前,我应该检查一下。啊,好吧。

这是引用来自哪里的链接(我相信):

http://sourceware.org/bugzilla/show_bug.cgi?id=6547

glibc文档缺陷:

http://sourceware.org/bugzilla/show_bug.cgi?id=12751

已打开

以帮助避免其他人点击此内容。

答案 2 :(得分:0)

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