すべてのクリティカル セクションに対して 1 つの QMutex を定義する必要がありますか? または、クリティカル セクションごとに 1 つの QMutex を定義する必要がありますか?
lock(object) {...}
c SharpのようにQtに同一の概念はありますか?
すべてのクリティカル セクションに対して 1 つの QMutex を定義する必要がありますか? または、クリティカル セクションごとに 1 つの QMutex を定義する必要がありますか?
lock(object) {...}
c SharpのようにQtに同一の概念はありますか?
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