2013-04-18 151 views
0

我正在尋找關於在我的計算機視覺項目中管理大量數據的概念性建議。我遇到了麻煩:a)概念化和b)實現協調這些大量數據流的概念,這些數據流既作爲從攝像機輸入到程序的輸入,又作爲代碼生成。C++多線程數據管理

所以數據我得把手上可分成五個獨立的「流」,我會打電話給他們:

原始幀(從攝像機直接輸入) 目標圖像(子幀,拍攝從先前的圖像流) 時間戳(對於在原始幀) 車輛姿態數據(GPS,身體角度,從無線串行端口連接到車輛等) 姿態數據時間戳

的一般流程,如果我們完全按順序完成此操作,將是:

Frame = grabInputFrame(); 
TargetsVector = searchForTargets(Frame); 
VehicleData = getDataFromVehicle(); 

for each Target in TargetVector (
    targetData = processData(Target, VehicleData); 
    updateTargetLog(targetData); 
} 

所以這裏的交易:我想通過線程的方式來做到這一點,因爲算法是非常密集的處理器,並沒有順序相關(我的意思是我不需要顏色數據來獲得GPS座標的目標)。但是,我確實需要使用這些圖像來協調帶有目標和時間戳的圖像,因此我可以將正確的車輛數據用於正確的圖像等。

我的一位朋友提出了一種關係數據庫方法,但我正在使用C++。我想知道的是,有沒有一種方法可以模仿C++中的關係數據庫(具有與數據關聯的鍵,如時間戳或與數據或目標映像關聯的目標ID)?連接到SQL數據庫會使這更容易管理嗎?這樣做是否會有顯着的性能損失?這裏最重要的一點是,無論我做什麼,我都必須能夠鎖定共享數據,以便我可以安全地進行多線程。

我希望有這樣的分層數據結構經驗的人可以對我的情況有所瞭解。我提前感謝你的想法和批評。

回答

0

對於這樣的問題,OpenMP可能會有所幫助,這裏面提供了用於鎖和原子操作的內置函數。由於您有5個並行操作,因此可以創建5個線程並基於threadId執行不同的操作。