【发布时间】:2011-05-21 19:58:52
【问题描述】:
大家好,我正在学习 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() 来将它作为线程启动。总之谢谢。
【问题讨论】:
-
告诉我们,您预计会发生什么以及您看到会发生什么?
标签: qt