Мне нужно получить доступ к статической переменной из другого потока. Ниже приведен код.
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, подойдет ли это в моем случае?
Задача ещё не решена.
Других решений пока нет …