假设我们有一些基本的计时器和一个定期调用的槽。
SomeObject::SomeObject()
{
QTimer *timer = new QTimer;
connect(timer , SIGNAL(timeout()), this, SLOT(updateState()));
}
void SomeObject::updateState()
{
// some operations leading to update of updatedValue
}我也有来自同一个对象的函数,它强制更新并返回一些值。
bool SomeObject::getLatestState()
{
updateState();
return updatedValue;
}这个函数可以直接从不同的线程调用。这就引出了线程安全的问题。getLatestState中的简单互斥锁不会有帮助,因为在极少数情况下,getLatestState是从另一个启动updateState的线程调用的。并且同时可能发生定时器的超时。你能帮我妥善处理这种情况吗?
发布于 2017-07-17 23:30:45
QMutexLocker can be used in such situations
这是我的示例
static QMutex mainMutex;
.....
MainController* MainController::s_instance = NULL;
.....
MainController* MainController::getInstance()
{
if(!s_instance){
QMutexLocker lock(&mainMutex);
if(!s_instance){
s_instance = new MainController;
}
}
return s_instance;
}从不同的线程直接调用getInstance()函数。
https://stackoverflow.com/questions/45147626
复制相似问题