问题描述
我想以非常有效的方式在两个或多个进程之间共享数据。我正在使用C ++和boost.Interprocess。这是过程:
- 过程A:创建共享内存,然后写入。
- 过程B:从共享内存读取的读取器
- 过程C:与过程B相同
约束: 共享内存的大小未知,可能为10kB或30 MB。 进程A和B可以独立启动,因此进程B可以在进程A之前启动。 我想尽可能地确保崩溃安全,这意味着在读取器进程崩溃的情况下,应用程序会继续运行...
SharedMem当前使用的代码(到目前为止,使用托管段):
struct MainStruct
{
MainStruct(const void_allocator& void_alloc)
:/* ... */
{
}
//Mutex to protect access to the data
mutex_type mutex;
//Condition to wait when new data is ready
condition_type cond_new_data;
//Condition to wait when data has been read by a reader
condition_type cond_data_read;
// More code ...
};
// Shared memory creation
m_sho = new bi::managed_shared_memory(bi::create_only,m_shared_memory_name.str(),size);
void_allocator alloc_inst(m_sho->get_segment_manager());
m_main_struct = m_sho->construct<MainStruct>("main")(alloc_inst);
m_data_struct = m_sho->construct<CharVector>("data")(alloc_inst);
我的问题:
- 如果使用共享内存的进程崩溃,是否可以假设一切正常并继续?互斥锁可以被锁定,但是由于 time_locked()可以检测到它,然后强制解锁互斥锁。尝试修复内存是否有意义?还是赌博,我应该取消映射并重新映射?
- 了解我的项目的限制(开始时大小未知,防撞...),您是否有建议的设计思路(如果可能,请使用Boost.Interprocess)
谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)