我在应用程序中有一个严重的错误,我试图了解发生了什么...... 在崩溃之前我有一些日志。 我不能简单地重现这个错误。
上下文:
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 ++程序在启用编译器优化时处于发布模式。