C ++ 11保证没有并发调用

时间:2013-09-01 13:22:35

标签: c++11

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

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

3 个答案:

答案 0 :(得分:7)

不,您需要在需要时锁定和解锁mutex。只是存在一个互斥锁,不能保证。此外,unique_ptr无法更改此内容!

互斥示例位于参考:http://en.cppreference.com/w/cpp/thread/mutex

答案 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