0

http://doc.qt.io/archives/qt-4.7/qmutexlocker.html

このクラスはコンストラクターでミューテックスをロックするため、ミューテックスの作成中にエラーが発生した場合、それが何であったかを知ることができますか (コンストラクターは何も返しません)?

これはある意味デメリット?

ここでポイントがありませんか?

4

2 に答える 2

1

ミューテックスとロックを混同している可能性があります。ミューテックスは共有同期オブジェクトです。ロックは、各実行コンテキストに対してローカルなローカル オブジェクトであり、共通ミューテックスをロックすることによって同期を実行します。したがって、ロックが意味を持つためには、ミューテックスがすでに存在している必要があります。

Foo sharedData;           // \ global/
QMutex sharedDataMX;      // / shared

void run_me_many_times()
{
    QMutexLocker lk(&sharedDataMX);

    // access "sharedData"
}
于 2012-08-13T12:06:00.640 に答える
1

QMutexLockerオブジェクトへのポインターを取得 (および処理) します。QMutexオブジェクトではありません (の上に実装されpthread_mutex_tている場合でも)。a QMutexpthread_mutex_t

オブジェクトのロック/ロック解除は、QMutexいかなる種類のエラー コードも返しません (QMutex::lock()およびQMutex::unlock()return void)。

下位の「pthread レベル」で発生する可能性のあるエラーは、QMutexオブジェクトによって内部的に処理されるか、C++ 例外が発生するか、コードに欠陥 (デッドロックなど) が発生します (たとえば、再帰的に取得しようとした場合)。 aQMutexは非再帰的です)。

于 2012-08-13T19:25:03.953 に答える