堆损坏和互斥

时间:2012-11-05 12:40:08

标签: c++ heap heap-corruption boost-mutex

我在应用程序中有一个严重的错误,我试图了解发生了什么...... 在崩溃之前我有一些日志。 我不能简单地重现这个错误。

上下文:

Thread1:
void f()
{
    log(thread1_1)
    boost::lock_guard< boost::recursive_mutex > lock(mutexABC)
    log(thread1_2)
       -- eventually corruption heap could occur here
    log(thread1_3)
}

Thread2:
void f()
{
    log(thread2_1)
    boost::lock_guard< boost::recursive_mutex > lock(mutexABC)
       -- eventually corruption heap could occur here
    log(thread2_2)
}

在我的日志中(我使用的是LOG4CXX),我有以下顺序:

15:36:45,260  thread2_1
15:36:45,263  thread1_1
15:36:45,265  thread1_2
15:36:45,265  thread2_2

some GUI log thread3_*

15:36:45,276  //application crash
and no thread1_3 log before thread2_2!

如何在thread1_3之前记录thread2_2? 由于堆损坏而没有程序崩溃,锁可以解锁,第二个线程可以获取此锁并执行一些代码崩溃的应用程序崩溃?

我在Windows 7下。我的C ++程序在启用编译器优化时处于发布模式。

0 个答案:

没有答案