boost interprocess что за папка

Я прочитал немного о boost::interprocess::file_lock и он, кажется, делает в значительной степени то, что мне нужно (поддержка разделяемой и эксклюзивной блокировки и разблокировка в случае сбоя или выхода из процесса).

Хотя в чем я не уверен, так это в чем делать в файл? Могу ли я использовать, например, файл длиной 0 байт? Есть ли boost::interprocess написать что-нибудь в это? Или о его присутствии заботится вся система?

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

Решение

Boost ничего не делает с файлом, он полагается на операционную систему, чтобы выполнить эту работу. Поддержка отображаемых в память файлов является общей возможностью операционной системы виртуальной памяти с постраничной загрузкой. Как Windows, Linux, OSX. Память, как правило, поддерживается файлом подкачки, а резервное копирование этого файла — это лишь небольшой шаг. Boost просто предоставляет независимый от платформы адаптер, и ничего более.

Вы захотите взглянуть на соответствующие страницы документации ОС, чтобы увидеть, что возможно и как это будет работать, когда вы делаете что-то необычное. Для Linux и OSX вы хотите посмотреть на mmap справочные страницы. Для Windows посмотрите на CreatefileMapping ,

Да, вам почти всегда нужно разрешить доступ к файлу, отображенному в памяти, поэтому, например, один процесс будет пытаться прочитать данные только тогда, когда другой процесс закончит их запись. Наиболее подходящий для этого примитив синхронизации не file_lock (операционная система уже блокирует файл), это именованный мьютекс. Используйте, скажем, буст класс named_mutex .

Имейте в виду, что это очень Механизм взаимодействия низкого уровня и не имеет никаких удобств. К тому времени, когда вы добавляете всю необходимую синхронизацию, вы уже на полпути к тому, что ОС уже делает с именованным каналом или сокетом локальной петли. Если вы обнаружите, что вам необходимо скопировать данные в отображенное представление, что не редкость, поскольку его нелегко изменить, то вы потеряете все преимущества.

Пытаюсь построить класс в памяти, и потом в другом процессе его прочитать. Почему-то выдаёт другой адрес и вылетает Segmentation fault

1 ответ 1

Достаточно обычный #include , заменить на interprocess-овский.

И саму переменную объявлять не std::string , a boost::interprocess::string .

И ребёнок видет то что видет родитель и может менять, и его изменения так же увидет родитель. Точно так же надо отдельный, собственный vector, map и т.д. брать не из std:: , а из бустов. Полный список всех портов.

30 просмотра

1 ответ

1 Репутация автора

Я искал StackOverflow и обнаружил два потока, относящихся к «boost interprocess», но оба они в основном касаются только ОС Windows и также не обсуждают проблему, с которой я столкнулся. Тот же поиск в Google — та же проблема — ОС Windows, а также большинство дискуссий имеют возраст.

Моя проблема: На моем iMac (Mojave OS) в папке «Мои документы» неожиданно появилась папка с именем «boost_interprocess». Внутри папки находится документ с именем «pdfEngine-10.0.472-0a71a373-fe27-499f-be0c-2d67402dc128_shm». Каждый раз, когда это появлялось, я удалял это и очищал мусор. Это случайно появляется на следующий день или несколько дней спустя. Я запустил Malwarebytes, и он не распознает его как угрозу.

Мой вопрос: кто-нибудь знает, что это такое и как навсегда удалить его?

Ответы (1)

0 плюса

168 Репутация автора

Папка boost_interprocess является одним из методов межпроцессного взаимодействия посредством разделяемой памяти, и вы можете увидеть эту папку в других ОС, так как это механизм наддува .

Файлы, которые вы видите в папке, называются объектами общей памяти.

В вашем случае, похоже, что некоторые данные механизма PDF передаются таким образом, и нет причин для тревоги.

Оцените статью