2014-10-05 205 views
0

正如标题所示,你如何使用QMutexLocker重新锁定和解锁成员函数,我很难弄清楚这怎么可能完成。我们什么时候使用QMutexLocker重新锁定和解锁?

  1. 是否使用RAII风格的QMutexLocker总是能够承诺从数据竞争中获得良好的锁定状态?

  2. 如果不是,那么可能发生这种情况时,我们需要调用unlock和relock函数?

  3. 我看到这个QT源https://qt.gitorious.org/qt/qtbase/source/3b577dfe798bf5065a2bba4d7095709454aa709c:src/plugins/platforms/android/androidjnimenu.cpp
    它确实实现在QMutexLocker使用不同qmutex变量QMutexLocker使用。而我的问题是,我们需要多少所有权qmutex用于不同的qmutexlocker,如上面的qt源?什么时候我们只需要单一所有权qmutex用于不同的qmutexlocker?

你能举一个例子,请对第二个问题..感谢

+0

你能改一下问题1?这个不成立。 – cmannett85 2014-10-05 07:01:57

+0

好校正的缩进 – user3453753 2014-10-05 07:10:26

+0

不,我的意思是这句话。 – cmannett85 2014-10-05 07:13:20

回答

3

典型使用案例解锁和重新锁定的就是 - 修改 - 更新:

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; 
    } 
}; 
+0

现在好了,谢谢。 – user3453753 2014-10-05 22:49:58

相关问题