c++ - QMutexLocker 和 QMutex 哪个更好用?

标签 c++ linux qt mutex

我想知道关于 Mutex 的哪种用法更好。我想到的两种用法是:

1)

   Qlist getList()
   {
      QMutexLocker locker(&m_mutex);
      return m_list;

   }

   for ( int i =0 ;i < getList.count ; i++)
   {
             obj = getList.at(i)
             //some work 
             //  on obj            
    }

2)

    Qlist getList()
    {
      return m_list;

   }

   {
     QMutexLocker locker(&m_mutex);
     for ( int i =0 ;i < getList.count ; i++)
     {
             obj = getList.at(i)<br>
             //some work 
             //  on obj                
     }
   }

简而言之,是在任何使用列表的地方保护它更好,还是在返回列表的 getlist 函数中放置一个互斥量更好?

最佳答案

我不明白你为什么要在 getter 中锁定互斥量。您所做的一切都是在制作 QList 浅拷贝时阻止其他 protected 部分运行。

QList 上执行操作时需要锁定互斥锁,这些操作需要与对 QList 的任何其他访问隔离开来。您在循环中对 QList 所做的工作的性质以及其他线程如何同时与它交互将决定您是否需要锁定它。

如果在循环期间没有其他线程可以更改元素的数量,那么只在循环体内围绕您对每个元素所做的工作进行锁定可能是安全的(这仍然取决于其他线程可能对内容执行的操作) QList),否则在循环体外部锁定。仅锁定 setter/getter 不会有任何效果。

关于c++ - QMutexLocker 和 QMutex 哪个更好用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8090706/

相关文章:

c++ - QMAKE_EXTRA_COMPILERS 变量使 INCLUDEPATH 无效

linux - Qt 应用程序部署 - libc.so.6 : version `GLIBC_2.17' not found

c++ - 异构容器和句柄对象

Linux : how to prevent user space processes from mapping certain memory range

java - mysqldump(错误代码 : 2) trying do backup from java in linux (server) with wildfly

c - 在Linux中创建pthread时检测到堆栈崩溃

c++ - 如何增加 QString 中的字符 (Qt)

c++ - 在滚动条上跟踪鼠标事件

c++ - 模板类上的 "unresolved external symbal"

c++ - 带有指向自身指针的 Arduino 结构泄漏内存