2014-10-05 2 views
0

Как следует из названия, как вы используете функцию блокировки QMutexLocker и функцию разблокировки, мне сложно в этом разобраться, как это можно сделать.когда мы используем блокировку и разблокировку QMutexLocker?

  1. Независимо от того, использует ли RAII-стиль QMutexLocker обещание прекратить блокировку из гонки данных?

  2. Если нет, то такие случаи, которые могут возникнуть, так что нам нужно вызвать функцию разблокировки и блокировки?

  3. Я вижу QMutexLocker использования из этого источника кварт https://qt.gitorious.org/qt/qtbase/source/3b577dfe798bf5065a2bba4d7095709454aa709c:src/plugins/platforms/android/androidjnimenu.cpp
    Это действительно осуществляет различные переменные QMutex для использования в QMutexLocker. И мой вопрос в том, когда нам нужно много qmutex для использования в другом qmutexlocker, таком как qt source выше? и когда нам нужно только одно свойство qmutex для использования в разных qmutexlocker?

Не могли бы вы привести пример, пожалуйста, на второй вопрос .. спасибо

+0

Вы можете перефразировать вопрос 1? Это не имеет никакого смысла. – cmannett85

+0

ok исправлен отступ – user3453753

+0

Нет, я имел в виду предложение. – cmannett85

ответ

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

Смежные вопросы