boost::interprocess::scoped_lock应用程序在锁内崩溃
boost::interprocess::scoped_lock application crash inside lock
我正在使用boost::interprocess::scoped_lock,如果应用程序在作用域内由于某种原因崩溃,则互斥锁不会释放。下次执行应用程序时(不重新启动计算机),互斥锁将被锁定。
这是怎么回事?下面我举一个简单的代码示例。
{
boost::interprocess::named_mutex lockMutex(boost::interprocess::open_or_create, "lockName");
boost::interprocess::scoped_lock<boost::interprocess::named_mutex> lock(lockMutex);
//crash here
}
我最后做了一个暂停,如下所示。有谁能想出一个不限制锁定时间的解决方案吗?
boost::interprocess::named_mutex named_mtx(boost::interprocess::open_or_create, lockName.c_str());
while(true)
{
if(named_mtx.try_lock())
{
break;
}
if(!named_mtx.timed_lock(boost::get_system_time() + boost::posix_time::milliseconds(TIMEOUT_MILLISECONDS)))
{
named_mtx.unlock();
}
}
这对我来说似乎完全符合逻辑:)
当应用程序崩溃时,映射到操作系统进程间通信机制(IPC)的互斥对象不会释放。当应用程序重新启动时,它试图获取互斥对象,但没有成功!
我想您的应用程序有不同的子系统(进程)需要同步。
您必须设计一个全局策略,以防某个子系统崩溃,从而正确管理锁。例如,如果某个子系统崩溃,它应该在启动时尝试解锁互斥锁。当其他子系统使用该锁时,这可能很棘手。超时也有帮助。在任何情况下,您都必须在设计策略时考虑到,在锁定互斥对象时,任何进程都可能崩溃。。。
当然,如果您不需要进程间锁定,请使用简单的作用域锁定:)
my2c
相关文章:
- 使用调试/崩溃报告将应用程序部署到客户端
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 如何找出应用程序崩溃的原因 - Win 10 LTSB
- 操纵安卓相机的深度图导致应用程序崩溃
- 为什么从文件获取图标时应用程序有时会崩溃?
- 在 Ubuntu 服务器上运行 QT 应用程序时崩溃
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- Qt应用程序找不到第三方DLL并崩溃
- 由于____chkstk_darwin,在Catalina上使用部署10.10编译的MacOS应用程序在HighSierra版本<崩溃
- QCompleter set模型使应用程序崩溃
- Qt 5 应用程序崩溃并出现"qLineEdit::setText"
- 切换NvAPI_Stereo_Deactivate/NvAPI_Stereo_activate会使unity应用程序崩溃
- Opencv在2013年第5季度不起作用.应用程序总是在窗口中崩溃
- eglSwapBuffers上的应用程序崩溃
- C 多线程崩溃应用程序
- 加载的 obj 模型闪烁并崩溃应用程序
- strcats func 崩溃应用程序
- 生成的Protobuf代码崩溃应用程序
- C++字符串::查找崩溃应用程序
- av_free随机崩溃应用程序-FFMPEG C++