Я хочу обмениваться данными между потоками и автоматически удалять их, когда последний пользователь закончит с ними. Похоже, что в большинстве случаев это работает при использовании boost::interprocess::shared_ptr
в сегменте boost::fixed_managed_shared_memory
: но не всегда.
Итак, безопасен ли boost::interprocess::shared_ptr
поток (и межпроцессный процесс)?
Если я использую свою общую память по фиксированному адресу (я почти уверен, что это будет нормально в моем 64-битном (ну, 48-битном) адресном пространстве), можно ли использовать обычный boost::shared_ptr
(который являются потокобезопасными) вместо этого?
некоторые пояснения:
Тип указателя, который я использую, - простой void*
(моя общая память отображается на фиксированный адрес).
Вопрос безопасности потоков связан с подсчетом ссылок, то есть разрешено ли копирование / уничтожение общих указателей на одно и то же в разных процессах одновременно. Не доступ к одному и тому же общему указателю в разных потоках и не доступ к указателю.
boost::shared_ptr
не может (поскольку он, помимо прочего, использует виртуальное наследование). - person James   schedule 20.03.2011shared_ptr
? Это полностью нарушает RAII, поэтому они, безусловно, должны быть такими же потокобезопасными, как и обычный shared_ptr. - person Eamon Nerbonne   schedule 27.03.2011