Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 何时使用QMutexLocker重新锁定和解锁?_C++_Multithreading_Qt - Fatal编程技术网

C++ 何时使用QMutexLocker重新锁定和解锁?

C++ 何时使用QMutexLocker重新锁定和解锁?,c++,multithreading,qt,C++,Multithreading,Qt,正如标题所示,如何使用QMutexLocker的relock和unlock成员函数,我很难弄明白这是怎么做到的 使用QMutexLocker的RAII风格是否总能从数据竞争中获得良好的锁定状态 如果没有,当这种情况可能发生时,我们需要调用解锁和重新锁定功能吗 我从这个qt源中看到QMutexLocker的使用情况 它确实实现了不同的qmutex变量,以便在QMutexLocker中使用。我的问题是什么时候我们需要很多所有权qmutex来在不同的qmutexlocker中使用,比如上面的qt源代码

正如标题所示,如何使用QMutexLocker的relock和unlock成员函数,我很难弄明白这是怎么做到的

  • 使用QMutexLocker的RAII风格是否总能从数据竞争中获得良好的锁定状态

  • 如果没有,当这种情况可能发生时,我们需要调用解锁和重新锁定功能吗

  • 我从这个qt源中看到QMutexLocker的使用情况
    它确实实现了不同的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,对不起,我不是英语母语人士,现在应该是正确的:)