我有两个场景,我不知道是否应该使用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;
}注意:在本例中,两个线程修改来自同一个数组的元素,但是它们不修改/访问公共元素,比如thread1处理前50行,而thread2处理下50行,但是它们甚至不访问彼此的行。
发布于 2013-01-27 09:51:34
如果这些场景不一起运行,则不需要互斥。从两个线程访问读取的数据是可以的,在两个(甚至更多的线程)中从同一个数组修改不同的元素也是可以的。需要互斥的情况要么是两个线程从数组中修改相同的元素,要么是在从另一个线程读取相同元素时从一个线程修改相同的元素。
https://stackoverflow.com/questions/14546137
复制相似问题