執行緒:
乙個程序可以分成多個執行緒,每個執行緒有自己的register set和stack,但共享程序的heap、data、code (見下圖)
建立執行緒:
在qt中要建立執行緒,第一步是繼承qthread類,第二步是實現其中的run()函式,該方法為protected型,由start()函式來呼叫。下面是例子:
執行緒同步:
多個執行緒在執行的時候,可以看作是並行的。當執行緒之間有共享資料時,為了使得資料狀態能夠保持連貫性而不被破壞,需要使用執行緒同步來保護某資料或者某段**(即把某資料的訪問或者某段**的執行由並行變成序列,從而達到保護的目的)。而執行緒中對資料或**的保持一般使用「鎖」(在qt中叫mutex)來把它們「鎖」住,使得在每個時刻這個資料/**只能被乙個執行緒訪問。qt中的mutex使用有下面幾種:
從上面可以看出:以「locker」結尾的「鎖」用起來更加方便,因為它的物件在銷毀時會自動釋放鎖;而不帶"locker"鎖在使用時要注意處理如異常、條件判斷等以保證鎖能夠被釋放,否則可能會造成執行緒「鎖」不釋放,而被「鎖」住的資源/**不能夠被別的執行緒訪問。
執行緒的建立和啟動
1 定義乙個mytask類,並繼承於os thread,重寫執行緒主函式routine 2 使用這個類 注 在大多數作業系統上,執行緒的建立和啟動是乙個連續的動作 mytask task task.run 建立並啟動執行緒 這是函式的呼叫,是乙個 參考a01 01中的例子 開啟資源監視器,觀察tes...
執行緒建立和互斥
執行緒的基本概念 我們知道程序是計算機分配資源的基本單位,計算機會為乙個程序分配記憶體空間和cpu的時間片等資源,而執行緒則是比程序更小的單位,乙個程序可以包含幾個執行緒,其中乙個為主執行緒,在乙個程序內的執行緒中記憶體資源是共享的,因此在乙個程序中的全域性變數每個執行緒都可以訪問的,但是每個執行緒...
建立和執行執行緒
thread thread new thread thread.setname t1 thread.start log.debug running 建立任務物件 runnable runnable new runnable 引數 1 是任務物件 引數 2 是執行緒名字,推薦 thread t1 ne...