Qt静态共享变量使线程安全

时间:2018-07-20 17:22:09

标签: c++ multithreading qt qmutex

我需要从其他线程访问静态变量。下面是代码。

settings.h

class settings
{

public:
    settings();
     static QList<int> settings::list;
}

settings.cpp

#include "settings.h"
QList<int> settings::list;

settings::settings()
{
}

现在,我正在从其他线程进行读写操作来访问list

thread1.cpp

  settings sett;
  QList<int> l = sett.list;  //read

thread2.cpp

  settings sett;
  sett.list.append(n);  //write

如果我以这种方式使用此代码而不使用QmutexQReadWriteLock也可以。

否则会导致某些内存访问问题并崩溃。实际上,上面我编写的代码演示了这种情况,我在真实的应用程序中实现了一个静态共享变量,该共享变量具有25个以上的线程,每个线程都访问该静态变量进行读写。

而且我注意到,当应用程序运行2-3小时时,有时会发生崩溃,并显示一个内容为“接收到SIGABRT:异常终止”的消息框,而当我调试时,我发现崩溃一直在发生在我访问此共享静态变量的地方。

那么在这里有必要使用互斥锁吗?

我还看过QGlobalStatic,是否适合我的情况?

0 个答案:

没有答案