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
可能在 a 之上实现pthread_mutex_t
)。
锁定/解锁QMutex
对象不会返回任何类型的错误代码(QMutex::lock()
和QMutex::unlock()
return void
)。
在较低的“pthread 级别”可能发生的任何错误都将由QMutex
对象在内部处理,导致 C++ 异常,或者导致代码中的缺陷(例如死锁)(例如,如果您尝试递归获取这QMutex
是非递归的)。