我正在尝试使用递归QMutex,我阅读了QMutex类引用,但我不知道该怎么做,有人可以给我一个例子吗?
我需要某种锁定QMutex的方法,可以在调用lock方法之后或之前将其解锁。
如果递归互斥不是该方法,还有其他方法吗?

最佳答案

要创建递归QMutex,只需在构造时传递QMutex::Recursive即可,例如:

QMutex mutex(QMutex::Recursive);
int number = 6;

void method1()
{
    mutex.lock();
    number *= 5;
    mutex.unlock();
}

void method2()
{
    mutex.lock();
    number *= 3;
    mutex.unlock();
}
Recursive意味着您可以在同一线程中多次锁定互斥锁,而不必将其解锁。如果我很了解您的问题,那就是您想要的。

请注意,如果您递归锁定,则必须调用相同次数的解锁。锁定/解锁互斥锁的更好方法是使用 QMutexLocker
#include <QMutexLocker>

QMutex mutex(QMutex::Recursive);
int number = 6;

void method1()
{
    QMutexLocker locker(&mutex); // Here mutex is locked
    number *= 5;
    // Here locker goes out of scope.
    // When locker is destroyed automatically unlocks mutex
}

void method2()
{
    QMutexLocker locker(&mutex);
    number *= 3;
}

10-04 15:02