C++ 删除fork之后的条件_变量时boost崩溃

C++ 删除fork之后的条件_变量时boost崩溃,c++,linux,boost-asio,C++,Linux,Boost Asio,我有一个与我的应用程序一起加载的共享库。 加载库时,它会创建boost::condition_变量的实例。 并在它存在时将其删除(使用at_exit() 我的应用程序调用fork()。当子进程结束时,库似乎试图删除condition_变量,但断言失败 我认为它与fork有关,因为只有子进程(只有在父进程结束后才终止)导致崩溃 有人知道为什么会这样吗? 有没有人知道如何解决这个问题(不用尝试/抓住) 坠机事件: Missing separate debuginfos, use: debuginfo

我有一个与我的应用程序一起加载的共享库。 加载库时,它会创建boost::condition_变量的实例。 并在它存在时将其删除(使用at_exit()

我的应用程序调用fork()。当子进程结束时,库似乎试图删除condition_变量,但断言失败

我认为它与fork有关,因为只有子进程(只有在父进程结束后才终止)导致崩溃

有人知道为什么会这样吗? 有没有人知道如何解决这个问题(不用尝试/抓住)

坠机事件:

Missing separate debuginfos, use: debuginfo-install boost-filesystem-1.41.0-11.el6_1.2.x86_64 boost-system-1.41.0-11.el6_1.2.x86_64 glibc-2.12-1.47.el6.x86_64 libgcc-4.4.6-3.el6.x86_64 libstdc++-4.4.6-3.el6.x86_64
(gdb) bt
#0  0x0000003eca232885 in raise () from /lib64/libc.so.6
#1  0x0000003eca234065 in abort () from /lib64/libc.so.6
#2  0x0000003eca22b9fe in __assert_fail_base () from /lib64/libc.so.6
#3  0x0000003eca22bac0 in __assert_fail () from /lib64/libc.so.6
#4  0x00007f64bab101f6 in ?? () at /usr/include/boost/thread/pthread/condition_variable_fwd.hpp:86

这似乎是因为您使用了fork()而不是exec(),这就留下了两个进程,每个进程都注册了atexit处理程序。为了克服这个问题,考虑简单地添加全局布尔(每个进程一个),在执行任何操作之前都将由ATExter处理程序检查。然后,只需在子进程中设置bool,使其处理程序不执行任何操作

有关详细信息,请参阅: