C ++ / Qt枚举 - 我应该使用锁定来跨线程共享值吗?

时间:2010-07-03 20:28:41

标签: c++ qt multithreading

我有一个C ++ / Qt QThread工作线程,它将当前状态存储为ENUM(例如,工作,完成等值)。只有工作线程设置ENUM。

我需要能够从另一个线程(GUI线程)读取工作线程的状态,以在屏幕上显示是否正在进行工作。

在一个线程(worker)中读取/写入ENUM是否安全,并在其他线程中读取?否则,我应该在读/写的地方使用像QMutex这样的锁定吗?

2 个答案:

答案 0 :(得分:1)

正如尼尔所说:是的,你需要锁定。对于您的用例,QReadWriteLock应该比QMutex更适合。

答案 1 :(得分:1)

更多Qt特定的方法是让工作线程在状态发生变化时发出信号及其状态。然后,GUI将连接到信号并更新工作线程状态所需的任何内容。如果执行此操作并按值传递状态,则不需要对状态进行任何互斥保护(因为在发出信号时复制该值,该副本永远不会更改,并且在UI线程中读取该副本) )。但是,如果仍需要在不同时间查询线程的状态,则仍需要锁定。

相关问题