gpt4 book ai didi

c++ - 共享内存中的 multi_index 容器

转载 作者:太空宇宙 更新时间:2023-11-04 13:54:35 24 4
gpt4 key购买 nike

我有这个结构:

struct myData
{
unsigned long id;
int age;
int phone;

myData(){};
myData(unsigned long id_, int age_, int phone_)
:id(id_),age(age_),phone(phone_){}
~myData(){};
};

这个多索引容器:

typedef multi_index_container<
myData,
indexed_by<
random_access<>, // keep insertion order
ordered_non_unique< member<myData, int, &myData::age> >
>
> myDataContainerType;

typedef myDataContainerType::nth_index<1>::type myDataContainerType_by_Id;
myDataContainerType myDataContainer;

和这个插入函数:

bool insert(unsigned long id, int age, int phone) { 

myDataContainerType::iterator it;
bool success;
boost::mutex::scoped_lock scoped_lock(mutex); // LOCK
std::pair<myDataContainerType::iterator, bool> result = myDataContainer.push_back(myData(id, age, phone));
it = result.first;
success = result.second;
if (success)
return true;
else
return false;
}

所以我想把这个 muti_index 容器放到 shared memory 中,让它也可以从其他应用程序访问。我看到了thisthat例如,但我根本不明白 allocator 的东西(为什么我需要一个 char 分配器?我需要在这里使用什么样的分配器等...)

有人可以解释一下如何将这个容器放入共享内存吗?

真的很感谢...

编辑:

好的,我添加了我的代码:

myDataContainerType *myDataContainer ;

void createInSharedMemory()
{
managed_shared_memory segment(create_only,"mySharedMemory", 65536);

myDataContainer = segment.construct<myDataContainerType>
("MyContainer") //Container's name in shared memory
( myDataContainerType::ctor_args_list()
, segment.get_allocator<myData>()); //Ctor parameters

}

并尝试像这样插入数据:

bool insert(unsigned long id, int age, int phone) { 

myDataContainerType::iterator it;
bool success;
boost::mutex::scoped_lock scoped_lock(mutex); // LOCK
std::pair<myDataContainerType::iterator, bool> result = myDataContainer->insert(MyData(id, age, phone));

it = result.first;
success = result.second;
if (success)
return true;
else
return false;
}

但我在插入行中收到此错误:(在 offset_ptr.hpp 中)

Unhandled exception at 0x000000013fa84748 in LDB_v1.exe: 0xC0000005: Access violation reading location 0x0000000001d200d0.

有什么想法吗???

最佳答案

调用segment.construct后,你检查过myDataContainer是否非空吗?也许您需要改用 segment.find_or_construct

关于c++ - 共享内存中的 multi_index 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22063569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com