Выделение Folly ConcurrentHashMap в общей памяти

Я пытаюсь выделить Folly Concurrent Hash Map на общей памяти с использованием Boost распределителя общей памяти.

#include <boost/interprocess/allocators/allocator.hpp>
#include <boost/interprocess/managed_shared_memory.hpp>
#include <folly/concurrency/ConcurrentHashMap.h>

template<class T>
using ShmAlloc = boost::interprocess::allocator<T,
boost::interprocess::managed_shared_memory::segment_manager>;

using Key = int;
using Value = int;
using Table = folly::ConcurrentHashMap<Key, Value, std::hash<Key>,
std::equal_to<Key>, ShmAlloc<uint8_t >>;

int main()
{
//Create a new segment with given name and size
managed_shared_memory segment(create_only, "SharedTable", 65536);

//Initialize shared memory STL-compatible allocator
ShmAlloc<uint8_t> alloc_inst (segment.get_segment_manager());

Table* table = segment.construct<Table>("t1")(alloc_inst);

// In another process I want to find it
auto res = segment.find<Table>("t1");
Table* found_table = res.first;}

но я получил следующую ошибку:

ConcurrentHashMap.h:496:74: error: no matching function for call to ‘boost::interprocess::allocator<unsigned char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family>, boost::interprocess::iset_index> >::allocator()’
SegmentT* newseg = (SegmentT*)Allocator().allocate(sizeof(SegmentT));

Я попытался обернуть распределитель общей памяти Boost распределителем, который имеет конструктор по умолчанию и статический член, который хранит экземпляр общей памяти Boost. Это устраняет ошибку компиляции, но возникает серьезная следующая проблема: Ошибка сегментации возникает из-за того, что Параллельная карта хэша не использует Allocator :: pointer (offset_ptr при использовании Boost allocator).

Может кто-нибудь мне помочь?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]