ngl*_*lee 8 c++ boost boost-interprocess
我试图用interprocess_mutex同managed_windows_shared_memory.在我的项目中,多个进程class A在以下代码中创建实例.
using namespace boost::interprocess;
class A
{
managed_windows_shared_memory* _shm;
interprocess_mutex* _mtx;
}
A::A()
{
_shm = new managed_windows_shared_memory{ open_or_create, "shm", 1024 };
_mtx = _shm->find_or_construct<interprocess_mutex>("mtx")();
}
A::~A()
{
delete _mtx;
delete _shm;
}
Run Code Online (Sandbox Code Playgroud)
我可以看到,它是安全的呼吁delete _shm;在~A(),因为managed_windows_shared_memory只有在使用它的每一个过程破坏了将被销毁managed_windows_shared_memory的对象,如写的文档.
不过,我不知道这是否是安全的呼吁delete _mtx;在~A().在文档中interprocess_mutex,没有提到它是否仍然被破坏,即使其他进程有对象引用它.
我搜索了这个,我猜我的选择是boost::interprocess::shared_ptr在这种情况下使用.我在这儿吗?这是我应该选择的吗?
从文档中:
两个进程共享同一个对象
(原文强调)。
显然,您不能销毁一个对象,而其他一些代码仍然可以访问它,即使它是另一个进程中的代码,因为两个进程共享同一个对象。
请注意,共享内存指针的情况有所不同。共享内存对象不在进程之间共享。它管理的内存区域是,但 C++ 对象本身是进程私有的。
另一方面,互斥体位于该共享内存区域中,因此是共享的。
除非您想重用互斥体占用的内存,delete _mtx否则根本不需要这样做,因此不必费心共享指针或引用计数器。删除共享内存对象只会取消映射相应内存段内的所有内容,就好像它从未存在过一样。
| 归档时间: |
|
| 查看次数: |
455 次 |
| 最近记录: |