Я пытаюсь разделить структуру между процессами, используя интерпроцесс в Boost.
Я определил сопоставленный файл для использования нулевого мьютекса, потому что у меня были проблемы с его блокировкой, и я не против выполнить синхронизацию самостоятельно.
У меня проблемы с поиском объектов.
У меня есть следующее объявление:
typedef boost::interprocess::basic_managed_mapped_file
< char,
boost::interprocess::rbtree_best_fit<boost::interprocess::null_mutex_family,boost::interprocess::offset_ptr<void>>,
boost::interprocess::flat_map_index>
my_mapped_file;
В процессе А я делаю:
m_managedMappedFile.reset(new my_mapped_file(bip::open_or_create, filename, filesize));
auto hdr = m_managedMappedFile->find_or_construct<Foo>(bip::unique_instance)();
auto x = m_managedMappedFile->find<Foo>(bip::unique_instance);
Что работает, как я и ожидал, то есть находит объект. Теперь в процессе B:
m_managedMappedFile.reset(new my_mapped_file(bip::open_only, filename));
auto ret = m_managedMappedFile->find<Foo>(bip::unique_instance);
По какой-то причине метод find возвращает null в процессе B. Я понимаю, что делаю что-то глупое, но не могу понять.
Кто-нибудь может помочь?
managed_mapped_file
- person sehe   schedule 09.02.2015