Qt中多线程间的同步
生活随笔
收集整理的這篇文章主要介紹了
Qt中多线程间的同步
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1 Qt中多線程間的同步
1 Qt中多線程間的同步
多線程編程的本質是什么?
- 并發性是多線程編程的本質。
- 在宏觀上,所有線程并行執行。
- 多個線程間相互獨立,互補干涉。
常規解決方案設計:
問題:線程間總是完全獨立毫無依賴的嗎?
- 并不是,在特殊情況下,多線程的執行在時序上存在依賴!
生活中的例子:
同步的概念:
- 在特殊情況下,控制多線程的相對執行順序。
- QThread類直接支持線程間的同步,wait()停止當前線程的執行,等待目標線程執行結束。
編程實驗:并行計算初探
#include <QtCore/QCoreApplication> #include <QThread> #include <QDebug>/*sum(n) => 1 + 2 + 3 + ... + nsum(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();cal2.wait();cal3.wait();int result = cal1.result() + cal2.result() + cal3.result();qDebug() << "result = " << result;qDebug() << "main end";return a.exec(); }參考資料:
總結
以上是生活随笔為你收集整理的Qt中多线程间的同步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt中的多线程编程
- 下一篇: 哪些人最容易被蚊子咬?