Boost进程间矢量,创建多个矢量指针

Boost interprocess vector, creating multiple vector pointers

本文关键字:指针 创建 进程 Boost      更新时间:2023-10-16

我想使用以下代码将一个共享向量插入到一个共享映射中:

managed_shared_memory segment(create_only ,"MySharedMemory" ,65536);
typedef allocator<int, managed_shared_memory::segment_manager> vecAllocator;
typedef vector<int, vecAllocator> vec;
typedef std::pair<int, vec* > ValueType;
typedef allocator<ValueType, managed_shared_memory::segment_manager> ShmemAllocator;
typedef multimap<int, vec*, std::less<int>, ShmemAllocator> MyMap;
ShmemAllocator alloc_inst (segment.get_segment_manager());
vecAllocator vectorallocator (segment.get_segment_manager());

MyMap *mymap = segment.construct<MyMap>("MyMap")(std::less<int>(),alloc_inst);
vec *myvec = segment.construct<vec>("myvec")(vectorallocator);
vec *myvec1 = segment.construct<vec>("myvec1")(vectorallocator);
myvec->push_back(10);
myvec->push_back(9);
myvec->push_back(8);
myvec1->push_back(987);
myvec1->push_back(123);
myvec1->push_back(456);

for(int i = 0; i < 6; ++i){
    for(int j = 0; j<6; j++)
        mymap->insert(std::pair<int, vec*>(i, myvec));
}
for(int i = 0; i < 6; ++i){
    for(int j = 0; j<6; j++)
        mymap->insert(std::pair<int, vec*>(i, myvec1));
}

的代码工作…但是我要做的是构造一个没有名字的向量。也就是像这样做

vec *myvec = segment.construct<vec>(vectorallocator);
vec *myvec1 = segment.construct<vec>(vectorallocator);

这样,如果我把它放在一个循环中,每个循环命名不同就没有问题了。有办法吗?或者至少有一种自动的方法在每个循环中以不同的方式命名它们?

我之前的回答很愚蠢…这就是正确答案我们必须使用匿名实例来得到我想要的。使用

完成
vec *myvec = segment.construct<vec>(anonymous_instance)(vectorallocator);

在这里解释http://www.boost.org/doc/libs/1_48_0/doc/html/interprocess/managed_memory_segments.html interprocess.managed_memory_segments.managed_memory_segment_features.anonymous

它还解释了其他一些好的功能

由于我不需要向量的名称,下面是我所做的。

unsigned int seconds;
srand ( time(NULL) );
seconds = rand() % 1000000;
std::stringstream buf;
buf << seconds;
vec *myvec = segment.construct<vec>((buf.str()).c_str())(vectorallocator);

和我现在可以有很多vec*而不必考虑名称。:)