【发布时间】:2016-06-10 14:56:41
【问题描述】:
我有一个对象,它的所有功能都应该按顺序执行。 我知道可以使用像
这样的互斥锁来做到这一点#include <mutex>
class myClass {
private:
std::mutex mtx;
public:
void exampleMethod();
};
void myClass::exampleMethod() {
std::unique_lock<std::mutex> lck (mtx); // lock mutex until end of scope
// do some stuff
}
但是使用这种技术,在 exampleMethod 中调用另一个互斥锁锁定方法后会发生死锁。
所以我正在寻找更好的分辨率。 默认的 std::atomic 访问是顺序一致的,因此不可能同时读取对该对象的写入,但是现在当我访问我的对象并调用一个方法时,整个函数调用也是原子的还是类似的
object* obj = atomicObj.load(); // read atomic
obj.doSomething(); // call method from non atomic object;
如果是,有没有比使用互斥锁锁定大多数功能更好的方法?
【问题讨论】:
-
只有在获取锁的顺序不同时才会发生死锁。解决方法:不要。
标签: c++ multithreading c++11 thread-safety atomic