问题描述
创建 static boost :: interprocess :: managed_shared_memory时,如果进程恰好在Managed_open_or_create_impl.hpp中设置atomic_write32(patomic_word,InitializedSegment)之前被杀死,
detail::atomic_write32(patomic_word,InitializedSegment);
另一个进程将在managed_open_or_create_impl.hpp中陷入无限循环
boost::uint32_t *patomic_word = static_cast<boost::uint32_t*>(region.get_address());
boost::uint32_t value = detail::atomic_read32(patomic_word);
while(value == InitializingSegment || value == UninitializedSegment){
detail::thread_yield();
value = detail::atomic_read32(patomic_word);
}
此问题与锁和互斥锁无关。
这是因为先前的进程在共享内存中写入了其状态(InitializingSegment),而其他进程则等待第一个进程完成,但是第一个进程由于某种原因被终止,不再存在,其他进程则读取了共享内存检查共享内存的状态,并且状态为InitializingSegment ...
如果共享文件的状态为InitializingSegment或UninitializedSegment并且正在运行的进程中没有生产者进程,则也许一个简单的解决方案是在开头删除共享内存文件。
有人可以帮我吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)