我正在使用 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();
}
}