
#include <QtCore/QCoreApplication>
#include <QThread>
#include <QDebug>
/*
sum(n) => 1 + 2 + 3 + ... + n
sum(1000) => ?
[1, 1000] = [1, 300] [301, 600] [601, 1000]
*/
class Calculator : public QThread
{
protected:
int m_begin;
int m_end;
int m_result;
void run()
{
qDebug() << objectName() << ": run() begin";
for(int i=m_begin; i<=m_end; i++)
{
m_result += i;
msleep(10);
}
qDebug() << objectName() << ": run() end";
}
public:
Calculator(int begin, int end)
{
m_begin = begin;
m_end = end;
m_result = 0;
}
void work()
{
run();
}
int result()
{
return m_result;
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "main begin";
Calculator cal1(1, 300);//创建线程
Calculator cal2(301, 600);
Calculator cal3(601, 1000);
cal1.setObjectName("cal1");
cal2.setObjectName("cal2");
cal3.setObjectName("cal3");
// cal1.work();
// cal2.work();
// cal3.work();
cal1.start();//启动线程
cal2.start();
cal3.start();
cal1.wait();//等待线程1执行结束再往下执行
cal2.wait();
cal3.wait();//等待线程3执行结束再往下执行
//多线程的执行,线程之间存在时序依赖关系。等到三个线程结束,才执行计算结果
int result = cal1.result() + cal2.result() + cal3.result();
qDebug() << "result = " << result;
qDebug() << "main end";
return a.exec();
}
本文详细探讨了多线程编程中的同步问题,包括互斥锁、条件变量、信号量等机制的使用,以及如何避免死锁和资源争抢,确保程序的正确性和高效性。
10万+

被折叠的 条评论
为什么被折叠?



