日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Qt 互斥锁 QMutex 的简单应用

發布時間:2025/3/15 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt 互斥锁 QMutex 的简单应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Qt 互斥鎖 QMutex 的簡單應用

在多線程解決問題中,經常會碰到多個線程操作同一片資源,有些時候用信號量的方式去處理,但有的時候需要用到互斥鎖。

互斥鎖:說白了就是,資源某個時間只能被一個線程使用。打個比方:家里的微波爐每次只能被一個人使用。

Qt中官網有個關于信號量的示例,http://doc.qt.io/qt-5/qtcore-threads-semaphores-example.html

我們將上面的示例改寫,利用互斥鎖來實現。

任務要求:

1、兩條生產線,只能共用一個數據倉庫,同時時間數據倉庫只能被一條生產線來使用。
2、一條消費者先,只要數據倉庫未空,就取出數據。

輸入結果如下:

代碼實現:

#include <QtCore> #include <stdio.h> #include <stdlib.h> #include <QDebug> #include <QList> #include<QMutex>const int DataSize = 15; const int BufferSize = 20;QList<char> bufferlist; //共享的數據列表QMutex mutexlock; //互斥鎖// 生產者線程類 class Producer_01 : public QThread { public:void run(); };void Producer_01::run() {qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));for (int i = 0; i < DataSize; ++i) {mutexlock.lock();char test = "ACGT"[(int)qrand() % 4];bufferlist.append(test);qDebug() << QString("producer_01: %1").arg(test);mutexlock.unlock();sleep(1); } }class Producer_02 : public QThread { public:void run(); };void Producer_02::run() {qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));for (int i = 0; i < DataSize; ++i) {mutexlock.lock();char test = "HIJK"[(int)i % 4];bufferlist.append(test);qDebug() << QString("producer_02: %1").arg(test);mutexlock.unlock();msleep(300);} }// 消費者線程類 class Consumer : public QThread { public:void run(); };void Consumer::run() {while (1){if(bufferlist.isEmpty()==false) //如果數據列表未空,就從頭還是取數據{msleep(500); //增加延時,表示消費的滯后時間qDebug() << QString("consumer: %1").arg(bufferlist[0]);bufferlist.removeAt(0); //刪除鏈表的頭}} }// 主函數 int main(int argc, char *argv[]) {QCoreApplication app(argc, argv);Producer_01 producer_01; //創建生產者的線程Producer_02 producer_02;Consumer consumer; //創建消費者的線程producer_01.start(); //線程開啟producer_02.start();consumer.start(); producer_01.wait(); producer_02.wait();consumer.wait();return app.exec(); }

總結:
1、互斥鎖相對信號量更好理解和應用。
2、互斥鎖同一時間只能被一條線程使用。本實例中最好在消費者線上也加上互斥鎖,因為消費者線上也厚對共享列表的操作。

總結

以上是生活随笔為你收集整理的Qt 互斥锁 QMutex 的简单应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。