http://doc.qt.io/archives/qt-4.7/qmutexlocker.html
このクラスはコンストラクターでミューテックスをロックするため、ミューテックスの作成中にエラーが発生した場合、それが何であったかを知ることができますか (コンストラクターは何も返しません)?
これはある意味デメリット?
ここでポイントがありませんか?
http://doc.qt.io/archives/qt-4.7/qmutexlocker.html
このクラスはコンストラクターでミューテックスをロックするため、ミューテックスの作成中にエラーが発生した場合、それが何であったかを知ることができますか (コンストラクターは何も返しません)?
これはある意味デメリット?
ここでポイントがありませんか?
ミューテックスとロックを混同している可能性があります。ミューテックスは共有同期オブジェクトです。ロックは、各実行コンテキストに対してローカルなローカル オブジェクトであり、共通ミューテックスをロックすることによって同期を実行します。したがって、ロックが意味を持つためには、ミューテックスがすでに存在している必要があります。
Foo sharedData; // \ global/
QMutex sharedDataMX; // / shared
void run_me_many_times()
{
QMutexLocker lk(&sharedDataMX);
// access "sharedData"
}
QMutexLocker
オブジェクトへのポインターを取得 (および処理) します。QMutex
オブジェクトではありません (の上に実装されpthread_mutex_t
ている場合でも)。a QMutex
pthread_mutex_t
オブジェクトのロック/ロック解除は、QMutex
いかなる種類のエラー コードも返しません (QMutex::lock()
およびQMutex::unlock()
return void
)。
下位の「pthread レベル」で発生する可能性のあるエラーは、QMutex
オブジェクトによって内部的に処理されるか、C++ 例外が発生するか、コードに欠陥 (デッドロックなど) が発生します (たとえば、再帰的に取得しようとした場合)。 aQMutex
は非再帰的です)。