boost :: interprocess :: managed_shared_memory在无限循环中等待,没有锁定和

问题描述

创建 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 (将#修改为@)