我有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行,但他们甚至不访问彼此的行。
答案 0 :(得分:1)
如果这些方案不能一起运行,则不需要互斥锁。访问数据以便从两个线程中读取是可以的,在两个(甚至更多线程)中修改同一个数组中的不同元素也是可以的。你需要互斥的情况是两个线程从数组修改相同的元素,或者从一个线程修改相同的元素同时从另一个线程中读取它们