首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候在QMutex Qt中使用QMutex?

什么时候在QMutex Qt中使用QMutex?
EN

Stack Overflow用户
提问于 2013-01-27 09:40:08
回答 1查看 270关注 0票数 0

我有两个场景,我不知道是否应该使用QMutex。我在没有QMutex的情况下多次运行这个程序&它没有显示出任何异常行为。为了简单起见,我已经略读了这里的代码。但是,作为一个安全的方面,我想知道我是否应该使用QMutex

场景#1:

代码语言:javascript
复制
 class A : QObject
 {
    Q_OBJECT

    private double **array;//it is initialised in the constructor & is 100x100

    slots:
          slot1(); //2 Qthreads are created in my main GUI thread along with 2 objects of class A, & by A aobj.movetothread();
          slot2(); //& connecting these 2 slots to started() SIGNAL of respective QThread's
                   //I have multi-threaded my application.
 }

 A::slot1()
 {
    double temp = array[i][j];
    //some operations on temp
 }

 A::slot2()
 {
    double temp = array[i][j];
    //some operations on temp
 }

注意:初始化后array[][]的内容不会改变。我只访问从它在两个线程中的信息。但是,有时来自array的相同元素可能被两个线程同时访问!

场景#2

代码语言:javascript
复制
 A::slot1()
 {
    double temp = somefunc();
    array[0][j] = temp;
 }

 A::slot2()
 {
    double temp = somefunc();
    array[50][j] = temp;
 }

注意:在本例中,两个线程修改来自同一个数组的元素,但是它们不修改/访问公共元素,比如thread1处理前50行,而thread2处理下50行,但是它们甚至不访问彼此的行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-27 09:51:34

如果这些场景不一起运行,则不需要互斥。从两个线程访问读取的数据是可以的,在两个(甚至更多的线程)中从同一个数组修改不同的元素也是可以的。需要互斥的情况要么是两个线程从数组中修改相同的元素,要么是在从另一个线程读取相同元素时从一个线程修改相同的元素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14546137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档