2014-10-05 204 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

相關問題