1

是否足以保证不会有对对象的并发调用std::mutexstd::unique_ptr在下面的代码片段中会Object不会有任何并发​​调用?

class Example {
public:
std::mutex Mutex;
Example(){...
};
//
private:
static std::unique_ptr<Object> Mutex;
};
4

3 回答 3

7

不,您必须在需要时锁定和解锁mutex。只是不能保证互斥体的存在。这也是一个unique_ptr无法改变的!

互斥锁示例在参考中:http ://en.cppreference.com/w/cpp/thread/mutex

于 2013-09-01T13:28:20.653 回答
3

然而,const 现在确实保证除了您使用 const 之外,没有任何东西可以同时更改您的对象。 这显然假设您使用了一个编码良好的对象(如 STL 容器)并且没有人试图绕过编译器检查

见:http ://herbsutter.com/2013/01/01/video-you-dont-know-const-and-mutable/

于 2013-09-01T13:39:57.457 回答
0

unique_ptr 主要与资源管理和 RAII 习语有关。您不需要使用 unique_ptr 来实现线程安全,即使在某些情况下它可能被证明是有用的。但是,您提供的示例有点不寻常,您使用了两次标识符 Mutex 来指示 std::mutex 和 std::unique_ptr。

我建议在深入了解并发和资源管理等更复杂的主题之前,先阅读一些关于 C++ 的好书。

Diego Dagum 的这篇不错的文章解释了 C++11 中关于并发的新特性 http://msdn.microsoft.com/en-us/magazine/hh852594.aspx

还有一篇关于unique_ptr的文章: http ://www.drdobbs.com/cpp/c11-uniqueptr/240002708

于 2013-09-01T14:07:04.650 回答