我需要从其他线程访问静态变量。下面是代码。
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
如果我以这种方式使用此代码而不使用Qmutex或QReadWriteLock也可以。
否则会导致某些内存访问问题并崩溃。实际上,上面我编写的代码演示了这种情况,我在真实的应用程序中实现了一个静态共享变量,该共享变量具有25个以上的线程,每个线程都访问该静态变量进行读写。
而且我注意到,当应用程序运行2-3小时时,有时会发生崩溃,并显示一个内容为“接收到SIGABRT:异常终止”的消息框,而当我调试时,我发现崩溃一直在发生在我访问此共享静态变量的地方。
那么在这里有必要使用互斥锁吗?
我还看过QGlobalStatic,是否适合我的情况?