0

すべてのクリティカル セクションに対して 1 つの QMutex を定義する必要がありますか? または、クリティカル セクションごとに 1 つの QMutex を定義する必要がありますか?

lock(object) {...}c SharpのようにQtに同一の概念はありますか?

4

1 に答える 1

2

QMutexすべてのクリティカル セクションに対して1 つを定義すると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 は、2 つの異なるミューテックスによって個別にロックされます。したがって、method1() を呼び出しても、セクション 2 へのアクセスはロックされません。

また、ほとんどの場合、単独で使用するQMutexLockerよりも簡単かつ安全に使用できることに注意してください。QMutex

于 2012-12-30T11:03:56.343 に答える