Boost中的线程访问冲突升级关闭

时间:2017-02-17 21:56:54

标签: c++ boost boost-thread boost-log

我有一个使用boost记录的应用程序。在关闭期间,它会在空指针访问时获得访问冲突。当我逐步执行代码到达失败点时,看起来boost :: log dll正在被解除分配,然后boost :: thread代码尝试访问曾经被log dll占用的内存。

我没有在我自己的代码中使用任何boost线程,因此假设boost-thread dll由boost log使用。

为确保所有接收器在关机前都被销毁,我打电话给:core-> flush()和core-> remove_all_sinks()

我正在使用boost 1.60并且还尝试使用boost 1.63。结果相同。

有没有办法确保在退出/卸载dll之前完全关闭boost log核心?

1 个答案:

答案 0 :(得分:1)

此问题可能与boost系统设置的语言环境对象有关。同样在你的情况下,这个语言环境可能会在Boost.Log被取消初始化之前被销毁,从而导致崩溃。

根据boost docs特别是日志文件轮换模块。他们为类似案例Boost known issues

提供了一种解决方法

解决方法是在主循环中初始化语言环境,以便boost有足够的周期来进行清理。

int main(int argc, char* argv[])
{
    boost::filesystem::path::imbue(std::locale("C"));
    initialize_log();

    // ...
}