每个关键部分都需要多个QMutex吗?

时间:2012-12-30 10:43:18

标签: qt critical-section thread-synchronization

我应该为所有关键部分定义一个QMutex吗?或者我应该为每个关键部分定义一个QMutex?

在Qt中是否有任何相同的概念,例如c Sharp中的lock(object) {...}

1 个答案:

答案 0 :(得分: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更容易,更安全。