我正在尝试使用递归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;
}