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 QMutex可能在 a 之上实现pthread_mutex_t)。

锁定/解锁QMutex对象不会返回任何类型的错误代码(QMutex::lock()QMutex::unlock()return void)。

在较低的“pthread 级别”可能发生的任何错误都将由QMutex对象在内部处理,导致 C++ 异常,或者导致代码中的缺陷(例如死锁)(例如,如果您尝试递归获取这QMutex是非递归的)。

于 2012-08-13T19:25:03.953 回答