Qt之多執行緒間的互斥(上)

2022-09-23 23:06:20 字數 1289 閱讀 3227

生產消費者問題

-有n個生產者同時製造產品,並把產品存入倉庫中

-有m個消費者同時需要從倉庫中取出產品

-規則:

·當倉庫未滿,任意生產者可以存入產品

·當倉庫未空,任意消費者可以取出產品

#include

#include

#include

static qstring g_store;

class producer : public qthread

}};class customer : public qthread

msleep(1);

} }};int main(int argc, char *ar**)

臨界資源(critical resource)

-每次只允許乙個執行緒進行訪問(讀/寫)的資源

執行緒間的互斥(競爭)

-多個執行緒在同一時刻都需要訪問臨界資源

qmutex類是一把執行緒鎖,保證執行緒間的互斥

-利用執行緒鎖能夠保證臨界資源的安全性

qmutex中關鍵成員函式

-void lock()

·當鎖空閒時,獲取鎖並繼續執行

·當鎖被獲取,阻塞並等待鎖釋放

-void unlock()

·釋放鎖(同一把鎖的獲取和釋放鎖必須在同一執行緒中成對出現)

qmutex使用示例

qmutex mutex;//使用shi

mutex.lock();

// do something with critical resource

mutex.unlock();

ps:如果mutex在呼叫unlock()時處於空閒狀態,那麼程式的行為是未定義的!#include

#include

#include

#include

static qmutex g_mutex;

static qstring g_store;

class producer : public qthread

}};class customer : public qthread

g_mutex.unlock();

msleep(1);

} }};int main(int argc, char *ar**)

總結:-臨界資源每次只允許乙個執行緒進行訪問(讀/寫)

-執行緒鎖(qmutex)用於保護臨界資源

-執行緒只有獲取鎖之後才能訪問臨界資源

-鎖被其他執行緒獲取時,當前執行緒進入等待狀態

-執行緒鎖的獲取和釋放必須在同一執行緒中成對出現

QT 多執行緒互斥

今天是七夕佳節,我又來啦,最近到處跑累死人。無論任何程式語言,說到多執行緒,我們肯定要非常注意臨界資源的訪問問題。個人認為多執行緒互斥的內容是比較多,而且比較複雜的,這次的坑的篇幅可能比較長,盡可能用最通俗的語言來表達 什麼是臨界資源?當多個執行緒需要某個資源,而這個資源只能在同一時刻被乙個執行緒所...

Qt多執行緒互斥

目錄 一 多執行緒與臨界資源的依賴 現象分析 二 互斥和解決方法 三 qmutex的主要成員函式和使用 四 示例 五 小結 除了上一節所說的,多執行緒在 執行的時序上會有依賴,那麼其他地方是否還有所依賴呢?答案是有的,也就是與臨界資源的問題,所謂臨界資源是指每次只允許乙個執行緒進行訪問 讀或寫 的資...

QT開發之多執行緒

在linux中我們經常使用多執行緒程式設計,同時就會提出同步和非同步操作.像原子變數,訊號量,阻塞,自旋鎖,互斥所等,在qt中也有類似的概念,但是在我的開發中用的不是很多,下面列舉一下多執行緒程式設計的基礎.新建乙個gui應用專案,注釋的非常詳細.建立執行緒後,啟動執行緒預設是run函式,除非有特殊...