std :: tr1 :: shared_ptr是否互相排斥?

dar*_*mos 1 c++ windows shared-ptr mutual-exclusion

我有一个包含a BYTE*,一个引用计数器的类,CRITICAL_SECTION它保护它们不受并发访问的影响.

我想用一个替换所有这些std::tr1::shared_ptr<BYTE>.在MSDN说:

多个线程可以同时读写不同的shared_ptr对象,即使这些对象是共享所有权的副本也是如此.

一切听起来都没问题,直到我发现CRITICAL_SECTION课堂外的东西用来"锁定"它并以互相排斥的方式改变它的内容.好吧,它打破了封装,我想改变它.

我知道shared_ptr保证内存将被释放,但是当你写入内存时它是否保证互斥?

R. *_*des 5

您可以确保正确访问std::tr1::shared_ptr要点的数据.那些数据是你的.它只std::tr1::shared_ptr对删除它的时间很重要.

关于std::tr1::shared_ptr对象本身,您有以下保证:

  • 你可以安全地从多个线程中读取同一个实例 ;
  • 您可以安全地变异不同实例shared_ptr多个线程,即使实例是拷贝(共享相同的引用计数或其他);

任何其他同时访问(如同时读取和写入同一实例)是未定义的行为.

另请注意,shared_ptr新的C++ 11标准中有一个特殊的原子访问API.