2012-12-30 44 views

回答

2

如果您将为所有关键部分定义一个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的访问。

另请注意,在大多数情况下,单独使用QMutexLockerQMutex更容易和更安全。

相关问题