boost的named_mutex的一些坑
阿新 • • 發佈:2017-05-09
time 發現 clu 登陸 last brush 方案 spa roc
文件中的幾個值的意義
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) 函數會根據系統的事件來獲取啟動時間,
如果進程啟動之前,系統的日誌被一些清理工具清理掉了,那麽就會觸發異常
最近遇到一個問題,程序在a用戶下運行後,然後註銷windows,登陸b用戶,發現程序奔潰,抓了下堆棧,發現了boost的named_mutex一些細節,記錄下
#include <boost/interprocess/sync/named_mutex.hpp> #include <boost/interprocess/creation_tags.hpp>1.這段代碼在a用戶運行後,註銷,在運行b用戶,直接崩潰 解決方案
boost::interprocess::named_mutex mutex(boost::interprocess::open_or_create, "haha");
boost::interprocess::permissions per; per.set_unrestricted(); boost::interprocess::named_mutex mutex(boost::interprocess::open_or_create, "haha",per);
boost的named_mutex的一些坑