0
我应该为所有关键部分定义一个QMutex吗?或者我应该为每个关键部分定义一个QMutex?每个关键部分是否需要多个QMutex?
在c Sharp中是否有任何相同的概念,例如c Sharp中的lock(object) {...}
?
我应该为所有关键部分定义一个QMutex吗?或者我应该为每个关键部分定义一个QMutex?每个关键部分是否需要多个QMutex?
在c Sharp中是否有任何相同的概念,例如c Sharp中的lock(object) {...}
?
如果您将为所有关键部分定义一个QMutex
,则QMutex::lock()
将锁定对使用此QMutex对象的所有关键部分的访问权限。如果您将使用许多QMutex
对象,则它们中的每一个都将锁定相应的一段代码。
假设你有:
QMutex mutex;
void method1()
{
mutex.lock();
//section1
mutex.unlock();
}
void method2()
{
mutex.lock();
//section2
mutex.unlock();
}
无论线程调用方法1()或方法2()SECTION1和第2节被锁定。在后一种情况下:
QMutex mutex1;
QMutex mutex2;
void method1()
{
mutex1.lock();
//section1
mutex1.unlock();
}
void method2()
{
mutex2.lock();
//section2
mutex2.unlock();
}
section1和section2被两个不同的互斥锁分开锁定。所以调用method1()不会锁定对section2的访问。
另请注意,在大多数情况下,单独使用QMutexLocker
比QMutex
更容易和更安全。