翻譯 使用QThead進行執行緒開發 執行緒同步

2021-06-21 23:22:01 字數 1274 閱讀 7371

原文見

使用qthead進行執行緒開發

乙個qthread例項代表乙個執行緒並且提供了start()方法以啟動執行緒,該執行緒隨之將會執行覆寫qthread::run()。run()之於執行緒,相當於main()之於應用,都是作為入口。所有在run()中的**都為新的執行緒所執行,當run()函式返回時,執行緒就結束了。qthread發出訊號指示執行緒的啟動或結束。

建立執行緒:

以qthread作為基類宣告其子類,並覆寫run()方法,執行緒就建立好了

class mythread : public qthread

; void mythread::run()

啟動執行緒:

執行緒同步:

qmutex, qreadwritelock, qsemaphore,和qwaitcondition類提供了執行緒同步的方法。使用執行緒的本意是盡可能達到併發的效果,(但程式執行中)有些地方執行緒必須停下來等待其他執行緒。例如,如果兩個執行緒同時刻試圖訪問同一全域性變數,通常會造成不確定的結果。

qmutex提供了一種手動lock,或互斥鎖,任何時刻至多乙個執行緒能獲得互斥鎖。如果乙個執行緒嘗試獲得鎖當互斥鎖已經被上所。這個執行緒將會睡眠直到當前持有鎖的執行緒解開鎖。互斥鎖通常用來保護共享資料(例如,能被多個執行緒同時訪問的資料)的訪問許可權。在接下來的可重入和執行緒安全一節,我們將使用qmutex使得乙個類執行緒安全。

qreadwritelock與qmutex相似,除了它將對共享資料的讀與寫許可權區分開來,並且允許多個執行緒同時讀資料。盡可能使用qreadwritelock 代替qmutex將會使得多執行緒程式併發性更強。

qsemaphore是qmutex 的實現,用來保護某些一系列等同的資源。而相反,mutex 只用來保護乙個資源。semaphores 例程展示了semaphores 的典型程式:在生產者和消費者間同步流通的快取的訪問許可權。

qwaitcondition允許執行緒在某些條件滿足時,將其餘執行緒喚醒。乙個或多個執行緒可以阻塞等待qwaitcondition設定的條件以wakeone() or wakeall()滿足。使用wakeone()可以隨機選擇乙個執行緒喚醒,而使用wakeall()將所有執行緒喚醒。

條件變數的例程展現了如何使用qwaitcondition 而非訊號量去解決生產者-消費者問題。

注意qt同步的類依賴嚴格對齊的指標的使用。比如,你不能使用msvc包裝類。

使用nbdev進行jupyter專案的開發

使用jupyter進行開發,如何解決notebook和指令碼的矛盾呢?使用 nbdev,這個工具有點類似於pandoc。可以對juyter notebook進行自動的轉換成 python包,也類似於 data science project templete,提供了乙個模板組織自己的 noteboo...

linux下使用DNW傳資料 進行ARM開發板燒寫

0.工具準備 串列埠終端kermit,dnw for linux,secbulk驅動 1.安裝kermit sudo apt get install ckermit 2.配置kermit 建立配置檔案 kermrc,內容如下 usb轉串列埠,所以裝置為 dev ttyusb0 set line de...

Slog89 使用React框架進行前端開發1

上善若水 水善利萬物而不爭 處眾人之所惡 故幾於道 需要的資訊和資訊源 cd desktop mkdir arthurslogstore cd arthurslogstore cd client arthurslogstore public index.html src index.css inde...