我们一直在尝试在多线程C++应用程序中寻找一些堆损坏问题.作为一种技术,我们尝试将-lmcheck添加到应用程序的库行.这导致应用程序以相对较短的顺序崩溃,显然存在堆损坏.
我们的应用程序确实使用malloc/free和new/delete(视情况而定).
我们的一个团队想知道-lmcheck实际上是否是线程安全的,并且在所有malloc/free调用之间放置了一个mutex.崩溃消失了.
有谁知道-lmcheck是否应该支持多线程?我想知道我们是否只是误解了我们试图使用的工具,从而导致我们不必要的担忧.
不,mcheck不是线程安全的,不应该与多线程应用程序一起使用.这样做会引入其他问题,因为线程之间没有同步.以下是几个月前Ulrich Drepper(glibc维护者)对此主题的回应:
mcheck不适用于多线程代码.它不可能做到.使用mcheck底层技术无法解决这个问题.