我们一直在努力寻找多线程C ++应用程序中的一些堆损坏问题。作为一种技术,我们尝试将-lmcheck添加到应用程序的库行。这导致应用程序在相对较短的时间内以明显的堆损坏崩溃。
我们的应用程序确实同时使用malloc / free和new / delete(视情况而定)。
我们的一个团队想知道-lmcheck是否实际上是线程安全的,并且在所有malloc / free调用中都放置了一个互斥锁。崩溃消失了。
有没有人知道-lmcheck是否应该支持多线程?我想知道我们是否只是误解了我们试图使用的工具,从而导致我们不必要的担心。
答案 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 - 它可以与多线程应用程序一起使用 - 虽然它模拟线程,但它实际上并不使用线程。