我有一个包含BYTE*
的类,一个引用计数器和一个CRITICAL_SECTION
,它可以保护它们不受并发访问的影响。
我想用std::tr1::shared_ptr<BYTE>
替换所有内容。 MSDN说:
多个线程可以读取和写入不同的shared_ptr对象 同时,即使对象是共享所有权的副本。
一切听起来都不错,直到我发现班级中的CRITICAL_SECTION
被用在它之外来“锁定”它并以互斥的方式改变它的内容。好吧,它打破了封装,我想改变它。
我知道shared_ptr
保证释放内存,但是当你写入内存时它是否保证互斥?
答案 0 :(得分:5)
由您来确保正确访问std::tr1::shared_ptr
指向的数据。该数据是你的。只有当{@ 1}}删除它时才重要。
关于std::tr1::shared_ptr
对象本身,您有以下保证:
std::tr1::shared_ptr
的,即使实例是副本(共享相同的引用计数或其他); < / LI>
任何其他同时访问(例如同时读取和写入同一实例)是未定义的行为。
另请注意,新C ++ 11标准中的shared_ptr
具有用于原子访问的特殊API。