std::mutex
和std::unique_ptr
是否足以保证不会对对象进行并发调用?在以下代码片段中Object
将没有任何并发调用?
class Example {
public:
std::mutex Mutex;
Example(){...
};
//
private:
static std::unique_ptr<Object> Mutex;
};
答案 0 :(得分:7)
不,您需要在需要时锁定和解锁mutex
。只是存在一个互斥锁,不能保证。此外,unique_ptr
无法更改此内容!
答案 1 :(得分:3)
Const现在确保没有任何东西可以同时改变你的对象而不是你使用const。 这显然假设您使用编码良好的对象(如STL容器)并且没有人尝试解决编译器检查。
请参阅:http://herbsutter.com/2013/01/01/video-you-dont-know-const-and-mutable/
答案 2 :(得分:0)
unique_ptr主要与资源管理和RAII习语有关。即使在某些可能有用的情况下,您也不需要使用unique_ptr来实现线程安全性。但是,您提供的示例有点不寻常,您使用标识符Mutex两次来表示std :: mutex和std :: unique_ptr。
我建议在开始讨论并发和资源管理等更复杂的主题之前,先阅读一些关于C ++的好书。
Diego Dagum这篇精彩的文章解释了C ++ 11中关于concurency的新内容 http://msdn.microsoft.com/en-us/magazine/hh852594.aspx
关于unique_ptr的文章: http://www.drdobbs.com/cpp/c11-uniqueptr/240002708