Общая переменная Qt делает поток безопасным

Мне нужно получить доступ к статической переменной из другого потока. Ниже приведен код.

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, подойдет ли он в моем случае?

0 ответов

Другие вопросы по тегам