如标题所示,如何使用QMutexLocker重新锁定和解锁成员函数,我很难弄清楚该怎么做。
是否使用RAII风格的QMutexLocker总是从数据竞争中保证良好的锁定状态?
如果否,那么当这种情况很可能发生时,那么我们需要调用解锁和重新锁定功能吗?
我从此qt源https://qt.gitorious.org/qt/qtbase/source/3b577dfe798bf5065a2bba4d7095709454aa709c:src/plugins/platforms/android/androidjnimenu.cpp中看到了QMutexLocker的用法
它确实实现了用于QMutexLocker的其他qmutex变量。我的问题是,什么时候我们需要多个所有权qmutex来用于不同的qmutexlocker中,例如上面的qt源?什么时候只需要在不同的qmutexlocker中使用单一所有权的qmutex?
请问第二个问题。.谢谢
最佳答案
解锁和重新锁定的典型用例是get-modify-update:
class Foo {
QMutex dataMutex;
QVector<int> data;
public:
/// Thread-safe
void modify() {
QMutexLocker lock(&dataMutex);
QVector<int> copy = data;
lock.unlock();
copy << 42;
lock.relock();
data = copy;
}
};
关于c++ - 我们什么时候使用QMutexLocker重新锁定和解锁?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26200278/