多執行緒技術實現併發控制在專案中的應用

2021-10-06 18:48:04 字數 1980 閱讀 8809

1多執行緒技術

多執行緒可以實現並行處理,避免了某項任務長時間占用cpu的時間。大部分計算機都是單cpu處理器,為了執行所有這些執行緒,作業系統以輪換方式為這些執行緒提供時間片,給人一種假象,看起來像是同時執行多個執行緒,程序內的執行緒共享同一虛擬位址,相關系統資源和全域性變數。

但是如果兩個非常活躍的執行緒搶占系統cpu時間,執行緒切換的時候就會消耗掉很多cpu資源,降低系統的效能。這一點在多執行緒程式設計時候要格外注意。

2 mfc 多執行緒及執行緒同步

在mfc程式設計中,涉及到兩種形式的執行緒,分別為使用者介面執行緒以及工作者執行緒

前者主要是處理與介面相關的操作,並且實現訊息與事件響應,後者主要是進行後台任務的處理,該處理操作與使用者無關,兩者可同時進行且互不干涉。

工作者執行緒

通常用乙個函式代表乙個執行緒來實現工作者執行緒

1 mfc通過unit mycontrollingfunction()控制函式來實現工作者執行緒的建立。

2 再寫乙個與應用程式協同工作的函式 如 my thread();

3 執行緒啟動:通過函式afxbeginthread()建立乙個cwinthread類的物件。

然後對此物件進行初始化。

最後啟動該執行緒。

返回該執行緒的位址。

此時執行緒進行執行狀態。

臨界區物件

當多個執行緒同一時間訪問程序資源時,採用執行緒同步的方法。常見的同步物件有:臨界區,訊號量,互斥量,事件。通過這些物件實現執行緒的同步。

臨界區物件的作用是保證某一時間範圍內共享資料只允許乙個執行緒訪問。

使用過程中每個執行緒會提供乙個可供共享的臨界區物件,在程式中每乙個執行緒都能夠通過自身占有執行緒的方式來訪問該物件。並且在這個執行緒訪問過程中,其他執行緒一直等待下去直到臨界區物件被釋放。

mfc中乙個ccriticalsection物件對應乙個臨界區資源,使用該物件控制的臨界區資源前申請臨界資源,然後呼叫該物件的lock()成員函式,資源使用結束後呼叫該物件的unlock()成員函式釋放資源佔有權。

進行各個監控區域進行檢測時,我們採用多執行緒技術,可以在同一時間針對大批量船舶資料進行實時監控。`

1 針對不同區域初始化執行緒個數。

2 初始化之後建立檢測線程接收執行緒

3 建立檢測線程陣列。

建立監視區判斷目標是否在區域內陣列

監視區判斷目標是否接近區域執行緒陣列

會遇區檢測線程陣列。

錨泊區檢測線程陣列。

擱淺區檢測線程陣列。

報告線檢測線程陣列。

航道區檢檢測線程陣列。

4獲取圖層資訊:執行緒建立完成之後,根據圖層的型別呼叫loadfigueinf()函式獲取圖層資訊。

5 接著分配圖形執行緒,獲取圖形內的目標集合。同時向不同區域檢測線程傳送待檢測資料,分配資料到執行緒,開啟每個執行緒組檢測函式。進行資料分配。

6 檢測完成後,呼叫**sendalarmmessage()**函式傳送報警資訊。

java 多執行緒的併發控制

synchronized必須鎖的是物件,基本資料型別的變數不能當作物件鎖。要保證多執行緒使用的是同乙個互斥鎖 物件鎖 才能進行同步。死鎖的兩種情況 1 多個執行緒共用同乙個物件鎖,互相等待。2 互相持有對方所需的資源 即每個執行緒都需要同時拿到多個資源才能繼續執行,而多個執行緒都處於 各持有一部分,...

同步,多執行緒 ,多執行緒方式實現併發。

io請求幾乎不佔cpu的。同步請求相當於排隊買東西,乙個卡主了,其他的都結不了賬了。執行緒並不是越多越好,如果他特別多還不如同步高,所以對執行緒要有個限制,所以就出現了執行緒池,執行緒池在python3裡才有的,python2裡沒有的。建立程序的話是耗費很多資源的,建立執行緒是幾乎不耗費資源的。建立...

多執行緒併發佇列實現

2.使用 wait notify 實現乙個佇列,佇列有2個方法,add 和 get add方法往佇列中新增元素,get方法往佇列中獲得元素。佇列必須是執行緒安全的。如果get執行時,隊列為空,執行緒必須阻塞等待,直到有佇列有資料。如果add時,佇列已經滿,則add執行緒要等待,直到佇列有空閒空間。1...