Привет, ребята, я изучаю Qt и достиг класса QThread. Не имея опыта многопоточности, я потратил несколько часов на изучение семафоров, мьютексов, критических секций и функций ожидания в Win32API. Когда я запустил там несколько потоков и глобальную переменную ++ или - без синхронизации, я каждый раз получал разные результаты. Сейчас я пытаюсь сделать то же самое с QThread, но у меня не получается. Можете ли вы сказать мне, что не так? вот мой код:
#include <QCoreApplication>
#include <QMutex>
#include <QSemaphore>
#include <QThread>
#include <cstdio>
static const int N = 2000000;
class Thread : public QThread {
public:
Thread();
void run();
private:
static QMutex mutex;
};
QMutex Thread::mutex;
static int g_counter = 0;
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
Thread A, B, C;
A.run();
B.run();
C.run();
char c;
scanf("%c", &c);
printf("%d\n", g_counter);
return app.exec();
}
Thread::Thread() {
}
void Thread::run() {
//QMutexLocker lock(&mutex);
for (int i = 0; i < N; ++i) {
++g_counter;
--g_counter;
}
}
Я ожидал, что g_counter прыгает вверх и вниз, поскольку три потока изменяют его одновременно. Моя проблема заключалась в том, что я использовал run (), чтобы он выполнялся как простая функция вместо start (), чтобы запустить его как поток. В любом случае спасибо.