http://doc.qt.io/archives/qt-4.7/qmutexlocker.html
此类在其构造函数中锁定互斥锁,因此如果在创建互斥锁时发生错误,我们是否能够知道它是什么错误(构造函数不返回任何内容)?
这在某种程度上是一个缺点吗?
我在这里错过了一点吗?
答案 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
。