如标题所示,如何使用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/

10-13 06:59