共享内存崩溃安全吗?

问题描述

我想以非常有效的方式在两个或多个进程之间共享数据。我正在使用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 (将#修改为@)