我正在使用一个boost::interpocess::scoped_lock
用一个named_mutex
and a timeout
;我正在Linux操作系统中运行。
在我的一次测试中,我发生了崩溃:从那时起,每次我尝试再次运行该应用程序时,它都会卡在我创建锁的位置;看起来互斥锁仍然以某种方式获取(没有可能使用它的进程正在运行)。
最重要的是,如果你看下面的代码,我预计 150 微秒后,定时scoped_lock
返回给我一个错误..但事实并非如此..它只是挂在那里。
#include <boost/interprocess/sync/named_mutex.hpp>
namespace bi = boost::interprocess;
bi::named_mutex m_mutex;
try{
boost::posix_time::ptime pt(
boost::posix_time::microsec_clock::local_time() ) ;
pt+= boost::posix_time::microseconds( 150 );
bi::scoped_lock< bi::named_mutex > lock( m_mutex, pt );
if( !lock.owns() ){
FATAL( "I didn't acquire the lock." );
return EXIT_FAILURE;
}
....
我的问题如下:
- 如何确保
boost::interprocess
命名的互斥体被破坏了吗? (那么如何查看跨进程的共享互斥体以及如何销毁它们)
- 为什么获取互斥锁在 150 微秒后没有返回?下面的代码有什么问题吗?
多谢
AFG
我找到了解决方案:我错过了调用以下方法来销毁互斥体
boost::interprocess::named_mutex::remove( "MutexName" );
这段代码进行了所有必要的清理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)