У меня есть класс, который содержит BYTE*
, счетчик ссылок и CRITICAL_SECTION
, который защищает их обоих от одновременного доступа.
Я хочу заменить все это на std::tr1::shared_ptr<BYTE>
. MSDN говорит, что:
Несколько потоков могут одновременно считывать и записывать различные объекты shared_ptr, даже если объекты являются копиями, которые имеют общее владение.
Все звучит нормально, пока я не выясню, что CRITICAL_SECTION
из класса используется вне его, чтобы «заблокировать» его и изменить его содержимое взаимоисключающим образом.Хорошо, это нарушает инкапсуляцию, я хочу это изменить.
Я знаю, shared_ptr
гарантирует освобождение памяти, но гарантирует ли это взаимное исключение при записи в память?