QMutexLocker是否返回错误代码(如果有)?

时间:2012-08-13 11:56:37

标签: c++ qt pthreads mutex

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

此类在其构造函数中锁定互斥锁,因此如果在创建互斥锁时发生错误,我们是否能够知道它是什么错误(构造函数不返回任何内容)?

这在某种程度上是一个缺点吗?

我在这里错过了一点吗?

2 个答案:

答案 0 :(得分:1)

您可能会混淆互斥锁和锁。 mutex 是共享同步对象。 Locks 是本地对象,是每个执行上下文的本地对象,通过锁定公共互斥锁来实现同步。因此,互斥锁必须存在才能使锁定有意义:

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

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

    // access "sharedData"
}

答案 1 :(得分:1)

QMutexLocker获取指向(并处理)QMutex个对象的指针 - 而不是pthread_mutex_t个对象(即使a QMutex可能在{pthread_mutex_t之上实现1}})。

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

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

相关问题