ubuntu 下chan作为全局变量或者单例成员,程序退出时崩溃


你可以尝试下develop分支下的代码,在那个里面我换掉了底层的sync实现。
尝试了下,结果还是会崩溃。
挂在相同的地方吗?应该不同吧,毕竟sync的代码都完全变了 请问有最小复现代码么?还是说在你的环境里,只要写全局变量,退出就崩溃? 是linux下的g++么?
我是在WSL里面编译运行的,跟这个平台有关系吗。
挂在这里

#include "libipc/ipc.h" //::ipc::channel ipc2 {"abc", ::ipc::receiver}; // 这一行注释掉就复现,打开的话就不会崩溃 ::ipc::channel ipc1; int main(int argc, char ** argv) { ipc1 = ipc::channel{"abc", ::ipc::sender}; return 0; }
看起来有点神奇。。可能是哪里有低级bug 我最近比较忙,等我有空了看一下
大佬解决这个bug了吗,我现在使用依旧遇到了这个bug
好,我这周末看看
我改了一下,你用这个分支(issue-71)上的代码测试下看看还有没有问题?
根本原因:
- 无参全局变量初始化时,不会同时创建内部的 mutex 对象
- main 函数内进行赋值操作,此时 mutex 对象才会被创建
- 同时,mutex 对象实现上依赖一个 static 懒单例,此单例在 mutex 对象真正创建时才会初始化
- 以上条件导致全局变量析构时,mutex 内的 static 懒单例在其之前就先析构了,从而导致内存访问异常
当前的解决方案:
- 在 chan 对象初始化同时初始化 mutex 内的 static 懒单例,保证析构时的内存有效
非常感谢大佬帮忙解决问题,我立马就去测试下,感恩!!
没什么问题的话,我 merge 到 master 了哈