Qt 每个关键部分是否需要多个QMutex?

Qt 每个关键部分是否需要多个QMutex?,qt,critical-section,thread-synchronization,Qt,Critical Section,Thread Synchronization,我应该为所有关键部分定义一个QMutex吗?或者我应该为每个关键部分定义一个QMutex Qt中是否有与c Sharp中的lock(object){…}相同的概念 如果要为所有关键部分定义一个QMutex,则QMutex::lock()将锁定对使用此QMutex对象的所有关键部分的访问。如果要使用多个QMutex对象,则每个对象都将锁定相应的代码段 假设你有: QMutex mutex; void method1() { mutex.lock(); //section1 mutex.un

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


Qt中是否有与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();
}
线程调用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
更容易、更安全