0

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

上下文 :

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++ 程序在编译器优化打开的情况下进入发布模式。

4

0 回答 0