C++ 何时使用QMutexLocker重新锁定和解锁?
正如标题所示,如何使用QMutexLocker的relock和unlock成员函数,我很难弄明白这是怎么做到的C++ 何时使用QMutexLocker重新锁定和解锁?,c++,multithreading,qt,C++,Multithreading,Qt,正如标题所示,如何使用QMutexLocker的relock和unlock成员函数,我很难弄明白这是怎么做到的 使用QMutexLocker的RAII风格是否总能从数据竞争中获得良好的锁定状态 如果没有,当这种情况可能发生时,我们需要调用解锁和重新锁定功能吗 我从这个qt源中看到QMutexLocker的使用情况 它确实实现了不同的qmutex变量,以便在QMutexLocker中使用。我的问题是什么时候我们需要很多所有权qmutex来在不同的qmutexlocker中使用,比如上面的qt源代码
它确实实现了不同的qmutex变量,以便在QMutexLocker中使用。我的问题是什么时候我们需要很多所有权qmutex来在不同的qmutexlocker中使用,比如上面的qt源代码?什么时候我们需要在不同的qmutexlocker中使用单一所有权的qmutex
第二个问题你能举个例子吗。。谢谢解锁和重新锁定的典型用例是get modify update:
class Foo {
QMutex dataMutex;
QVector<int> data;
public:
/// Thread-safe
void modify() {
QMutexLocker lock(&dataMutex);
QVector<int> copy = data;
lock.unlock();
copy << 42;
lock.relock();
data = copy;
}
};
class-Foo{
QMutex数据互斥;
矢量数据;
公众:
///线程安全
void modify(){
QMutexLocker锁(&dataMutex);
QVector copy=数据;
lock.unlock();
复制解锁和重新锁定的典型用例是get-modify-update:
class Foo {
QMutex dataMutex;
QVector<int> data;
public:
/// Thread-safe
void modify() {
QMutexLocker lock(&dataMutex);
QVector<int> copy = data;
lock.unlock();
copy << 42;
lock.relock();
data = copy;
}
};
class-Foo{
QMutex数据互斥;
矢量数据;
公众:
///线程安全
void modify(){
QMutexLocker锁(&dataMutex);
QVector copy=数据;
lock.unlock();
抄写你能重新表述问题1吗?没有意义。好的,更正的缩进不,我是指句子。你应该看看。很少使用unlock
和relock
功能。@cmannett85,对不起,我不是英语母语,现在应该是正确的:)你能重新表述问题1吗?没有意义。好的,更正了缩进不,我指的是这个句子。你应该看看。很少使用解锁
和重新锁定
功能。@cmannett85,对不起,我不是英语母语人士,现在应该是正确的:)