我在QThread派生类中有2个插槽处理程序:一个是计时器处理程序,另一个是异步回调处理程序。两者都必须修改相同的数据。
struct somedata {
int max;
int min;
double avg;
}
...
class MyThread: QThread {
private:
somedata m_data;
private Q_SLOTS:
void asyncCallback(int a, int b) {
m_data.max += a;
m_data.min += b;
}
void timer() {
m_data.avg =(m_data.a + m_data.b)/2;
}
}
是否应该以某种方式序列化对m_data的访问,尽管两种方法都在同一个线程中? 谢谢,
答案 0 :(得分:0)
只要您可以保证您的数据在任何时候都只能由单个线程访问或修改,那么您无需通过线程安全结构来同步对该数据的访问。
验证这一点的一种方法是在调用函数时检查QThread的静态currentThread()
函数的返回值。
答案 1 :(得分:0)
如果两个函数都被同一个线程调用,那么当另一个调用在第二个插槽中时,你不必担心数据会发生变化。如果你不确定那么最好的选择是在两个插槽中使用互斥锁这样只有一个进程或更改m_data的值。