Повышение управляемой_windows_shared_memory сбоя find()

Я пытаюсь разработать плагин dll для стороннего приложения, которое считывает данные, сгенерированные другим исполняемым файлом. Я использую boost::managed_windows_shared_memory для этого.

exe создает общую память и записывает в нее объект, который работает нормально. Однако, когда я пытаюсь найти этот объект в коде dll, мое стороннее приложение падает. Я много искал и наткнулся на включение-увеличение">этот пост. В последнем ответе упоминается, что использование find() создает тупик.

Я пытался использовать boost::interprocess_mutex, но это тоже не сработало. Любые рекомендации о том, как я могу это исправить? Спасибо!

В исполняемом файле:

boost::interprocess::interprocess_mutex myMutex;

myMutex.lock();

i = managed_shm.find_or_construct<int>("MyInteger")(992); 

myMutex.unlock();

В dll:

boost::interprocess::interprocess_mutex myMutex;

myMutex.lock();

std::pair<int*, std::size_t> p = managed_shm.find<int>("MyInteger"); 

myMutex.unlock();

person Maverick    schedule 19.06.2014    source источник


Ответы (1)


Интерпроцесс (анонимный) предназначен для использования при размещении внутри разделяемой памяти. Если вы хотите использовать его для управления созданием области общей памяти или для синхронизации доступа к ней из-за пределов общей памяти, используйте именованный мьютекс:

person sehe    schedule 19.06.2014