我有一个包含一个BYTE*,一个引用计数器和一个CRITICAL_SECTION的类,该类可以防止它们同时访问。

我想用std::tr1::shared_ptr<BYTE>替换所有内容。 MSDN说:



一切听起来不错,直到我发现该类的CRITICAL_SECTION在其外部用于“锁定”它并以互斥的方式更改其内容。好的,它破坏了封装,我想更改它。

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

最佳答案

您可以确保正确访问std::tr1::shared_ptr指向的数据。这些数据是您的。仅在需要删除std::tr1::shared_ptr时才重要。

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

  • ,您可以安全地从的多个线程中读取同一实例
  • ,即使实例是副本(共享相同的引用计数或其他值),您也可以从多个线程中安全地对shared_ptrshared_ptr的不同实例进行变异。

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

    还要注意,新的C++ 11标准中的ojit_code具有用于原子访问的特殊API。

    关于c++ - std::tr1::shared_ptr是否互斥?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7182100/

    10-14 09:37