boost:Interprocess 实现了进程间通信功能,包括共享内存、内存映射文件、信号量、文件锁、消息队列等;

共享内存 指可被多个进程存取的内存,被用作进程间的通信。

boost::interprocess 在 1.78 版本之前如果进程崩溃可能导致死锁。从18年就有人提出这个issue,21年才修复。

最简单的复现方法是执行三遍下面的代码:

第二遍尝试再次写入时发现已经有这个Key了,写不进去。程序崩溃,并抛出异常:

第三遍因为上次的崩溃时没有释放锁,程序死锁;

新版本的 boost 在第三次执行程序的时候会不会死锁,抛出异常 :

原因在这几行,如果不想更新boost,改那几行也可以。