1. 程式人生 > >boost的named_mutex的一些坑

boost的named_mutex的一些坑

time 發現 clu 登陸 last brush 方案 spa roc

最近遇到一個問題,程序在a用戶下運行後,然後註銷windows,登陸b用戶,發現程序奔潰,抓了下堆棧,發現了boost的named_mutex一些細節,記錄下

#include <boost/interprocess/sync/named_mutex.hpp>
#include <boost/interprocess/creation_tags.hpp>
boost::interprocess::named_mutex mutex(boost::interprocess::open_or_create, "haha");
1.這段代碼在a用戶運行後,註銷,在運行b用戶,直接崩潰 解決方案
boost::interprocess::permissions per;
per.set_unrestricted();
boost::interprocess::named_mutex mutex(boost::interprocess::open_or_create, "haha",per);
文件中的幾個值的意義 UninitializedSegment, //0 InitializingSegment, //1 InitializedSegment, //2 CorruptedSegment //3 定義在boost\interprocess\detail\managed_open_or_create_impl.hpp 開始初始化為1,進程退出的時候改為2 2.文件創建在priv_open_or_create函數裏面,其中文件夾在create_device裏面創建,該函數最終調用 get_last_bootup_time(boost\interprocess\detail\win32_api.hpp) 函數會根據系統的事件來獲取啟動時間, 如果進程啟動之前,系統的日誌被一些清理工具清理掉了,那麽就會觸發異常

boost的named_mutex的一些坑