何时在C ++ Qt中使用QMutex?

时间:2013-01-27 09:40:09

标签: c++ multithreading

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

场景#1:

 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

 A::slot1()
 {
    double temp = somefunc();
    array[0][j] = temp;
 }

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

注意:在这种情况下,2 线程修改来自同一阵列的元素,但是它们不会修改/访问公共元素,即 thread1 处理首先说< em> 50行,而 thread2 处理接下来的50行,但他们甚至不访问彼此的行。

1 个答案:

答案 0 :(得分:1)

如果这些方案不能一起运行,则不需要互斥锁。访问数据以便从两个线程中读取是可以的,在两个(甚至更多线程)中修改同一个数组中的不同元素也是可以的。你需要互斥的情况是两个线程从数组修改相同的元素,或者从一个线程修改相同的元素同时从另一个线程中读取它们