难以获得增强共享内存段来构建
Struggling to get boost shared memory segments to construct
我有一些代码,我试图使一个共享内存段。在这一端,从类内部管理这个段。共享段将以"公告板"的方式使用。也就是说,这一个进程将写入它,许多其他进程将从它读取。废话少说:
#include <string>
#include <sys/types.h>
#include <boost/interprocess/managed_shared_memory.hpp>
static const std::string SHM_NAME("SharedMemory");
static const std::string SHM_STATUS("StatusArray");
static const std::string SHM_INFO1("MfgData");
class Manager {
u_int8_t* _status;
char* _info;
boost::interprocess::managed_shared_memory _shm;
Manager()
: _shm(boost::interprocess::create_only, SHM_NAME.c_str(), 1024)
{
// the process goes out to lunch on this first call, it's like a deadlock
status = _shm.construct<u_int8_t>(SHM_STATUS.c_str()) [128] (0); // array 128 bytes, init to 0
info = _shm.construct<char>(SHM_INFO1.c_str()) [256] (0);
}
public:
~Manager() {
_shm.destroy<u_int8_t>(SHM_STATUS.c_str());
_shm.destroy<char>(SHM_INFO1.c_str());
boost::interprocess::managed_shared_memory_object::remove(SHM_NAME.c_str());
}
Manager* Builder() {
// just in case a previous instance was abnormally terminated
boost::interprocess::managed_shared_memory_object::remove(SHM_NAME.c_str());
return new Manager(); // sort of a factory pattern
}
};
我从boost网站上做的关于如何做到这一点的阅读表明可能会出现死锁。事实上,这就是为什么我将该变量放入private部分并创建了生成器函数:这样,在构造过程中,就可以删除以前的实例。然而,这并没有缓解问题。
我尝试更改共享内存段的名称,以便它不会被使用,但是,当它到达这些代码行时,进程仍然挂起。
我将这个链接(以及来自同一文档站点的其他链接)用于我的模型。在这一点上,我需要第二组眼睛,最好是那些有经验的眼睛,提高进程间和共享内存。
顺便说一下,我从我提供的链接中使用的程序模型是"命名共享内存"程序。令人恼火的是,我已经把这个程序复制到我的Linux系统上,构建并运行它没有任何问题。我错过了什么?谢谢你的帮助,安迪
这个问题似乎与与boost无关的有关。我问了这个问题,并标记了它,因为当我第一次遇到这个问题时,这正是发生挂起的地方。我认为挂起是由于一个隐藏在推进库中用于进程间通信的互斥锁的阻塞请求。我相信我所拥有的代码结构,将actor设为私有并调用工厂函数,已经缓解了这个问题。
多亏了Brian的好建议,我能够及时发现问题所在。在这种情况下的问题是,当打开fifo时,我早些时候做的,非阻塞的选项没有或没有进入标志,进程正在阻塞等待另一方打开相同的管道进行写入。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 将字符串存储在c++中的稳定内存中
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用ndk-build.cmd构建Android.so文件
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 使用 g++7 构建的代码在访问未对齐的内存时崩溃
- 在 C++ 中构建内存分配
- 获得MAC地址的代码似乎会损坏内存,但仅在发布构建中而不是调试构建
- C++构建一个带有运算符重载的双边树-什么是好的内存解决方案
- 如何从文件表示构建内存中的树
- C++ 在 clon 中构建内存开销
- 使用Visual Studio将静态构建的库链接到共享库可能存在内存风险
- 在构建ADO记录集时将数据拉入内存
- 试图构建最小内存时出错
- 难以获得增强共享内存段来构建
- 如何构建JNI调用以避免内存泄漏
- 这是否会导致内存泄漏/我应该如何构建代码
- 在g++中构建事务内存C++代码
- c++ vector或Queue来构建内存和速度方面的大Q