Я провел небольшой тест и смог без проблем создавать и удалять boost::interprocess::shared_memory_object в исполняемом файле C++/CLI. В плагине C++/CLI dll я могу создать только boost::interprocess::shared_memory_object, но удаление не удается. Я проверил, что файл существует на момент удаления - он присутствует в папке boost::interprocess в подпапке с именем "20110606204418.125000". Память не была отображена никаким другим процессом. Есть идеи, в чем может быть причина? Вначале я думал, что это может быть как-то связано с тем, что проект представляет собой dll и нацелен на CLR, но, честно говоря, я не знаю. РЕДАКТИРОВАТЬ: код удаления вызывается другим потоком, чем код создания - это запрещено?
boost::interprocess::shared_memory_object::удалить не удается
comment
Кажется, что можно удалить в другом потоке, если вы синхронизируете операции, чтобы избежать удаления, пока выполняются другие операции над тем же самым.
- person John Zwinck   schedule 07.06.2011
Ответы (1)
Во время отладки я заметил, что путь к файлу, который нужно удалить внутри boost::interprocess::shared_memory_object::remove, отличается от файла, созданного конструктором boost::interprocess::shared_memory_object — путь, который нужно удалить, указывает на корень папка «boost_interprocess», в то время как фактически созданный файл находится в папке «boost_interprocess/20110606204418.125000». Поэтому я сообщил об ошибке для повышения. Посмотрим, что они с этим сделают.
person
andriej
schedule
07.06.2011
У вас есть ссылка на отчет об ошибке?
- person Jacob Peddicord; 20.09.2011