0

Should i define one QMutex for all of my critical sections? or i should define one QMutex for each critical sections?

is there any identical concept in Qt like lock(object) {...} in c Sharp?

4

1 回答 1

2

如果您将为QMutex所有关键部分定义一个,QMutex::lock()则将锁定对使用此 QMutex 对象的所有关键部分的访问。如果您将使用许多QMutex对象,那么每个对象都会锁定相应的代码段。

假设你有:

QMutex mutex;

void method1()
{
 mutex.lock();
 //section1
 mutex.unlock();
}

void method2()
{
 mutex.lock();
 //section2
 mutex.unlock();
}

线程调用method1() 还是method2() section1 和section2 是否被锁定。在后一种情况下:

QMutex mutex1;
QMutex mutex2;

void method1()
{
 mutex1.lock();
 //section1
 mutex1.unlock();
}

void method2()
{
 mutex2.lock();
 //section2
 mutex2.unlock();
}

section1 和 section2 分别被两个不同的互斥锁锁定。所以调用 method1() 不会锁定对 section2 的访问。

QMutexLocker另请注意,在大多数情况下,它比QMutex单独使用更容易、更安全。

于 2012-12-30T11:03:56.343 回答