多線程技術實現併發控制在項目中的應用

多線程技術實現併發控制以及在項目中的應用

先介紹下原理 多線程技術vs線程同步

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()**函數發送報警信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章