Проверить, существует ли уже Boost Interprocess manage_shared_memory?

Есть ли способ (кроме try-catch) определить, существует ли уже регион boost::interprocess:managed_shared_memory с определенным именем?

Я знаю, что если я выделю вектор Interprocess в области manage_shared_memory, я смогу проверить его существование с помощью manage_shared_memory::find(), но, похоже, нет способа проверить, существует ли сама область manage_shared_memory.


person user997112    schedule 01.05.2018    source источник
comment
Отвечает ли это на ваш вопрос? Есть ли лучший способ проверить наличие увеличенного сегмента разделяемой памяти?   -  person pooya13    schedule 01.03.2021


Ответы (1)


Вы можете использовать конструктор с boost::interprocess::open_or_create.

Если вы хотите узнать, что из двух произошло, вы можете использовать boost::interprocess::open_only или boost::interprocess::create_only, но вам нужно будет добавить «внешнюю» синхронизацию сверху: c++ Синхронизировать разделяемую память при чтении

person sehe    schedule 01.05.2018
comment
Разве это не предлагает использовать try-catch? Попробуйте создать с помощью create_only, если это не удастся, вы знаете, что памяти не существует? - person user997112; 01.05.2018
comment
Нет, это указывает на различные подходы, которые вы можете использовать. Ты не должен. На самом деле, вы не сказали нам, почему вы думаете, что должны. - person sehe; 01.05.2018
comment
Да, кстати, если вы знаете детали платформы, вы, конечно, можете использовать эти знания (ищите файловые узлы под /dev/shm/, например). Но я бы предложил злоупотреблять обработкой исключений, а не деталями реализации, которые делают код непереносимым. - person sehe; 01.05.2018