2012-05-02 16 views
0

我正在UBUNTU平臺上工作,我從兩個不同的相機(基於事件捕獲)接收圖像(通過UDP)並處理圖像(3D重建)。我想以這樣一種方式執行此操作,即在圖像接收操作正在進行時,圖像處理操作應該並行開始。我知道我可以爲這兩個並行操作使用兩個posix線程。但我很困惑,我該如何同步這兩個線程,以便線程在線程收到至少一對圖像後才能開始。如果我使process()線程等待mutex條件(每次它將收到一對映像時將由線程設置),接收將比處理快得多,並且線程可以多次設置條件一個圖像對正在被process()線程處理。什麼可能是一個更好的方式來實現這一行動?圖像接收和處理的並行操作C

+0

如果您的接收器可以超出處理範圍,您想要對整體數據流量控制做些什麼?使用生產者 - 消費者隊列將圖像對象排隊到處理器是相當容易的,但你必須首先決定數據流控制機制。 –

回答

2

在接收線程的線程安全隊列中放置圖像以處理(或指向每個圖像的指針或與信息有關的結構,無論您的機制是什麼)。使用semaphorepthread_cond可以在您將項目入隊後發出處理線程信號。

處理線程應該阻塞直到它收到cond信號,並且應該只在隊列爲空時阻塞。當此線程暢通時,它應該從隊列中彈出一個圖像並開始工作。當它完成處理時,它應該(在循環的頂部)決定是否阻止或處理另一個圖像。如果隊列爲空,則阻塞。如果隊列不是空的,它會彈出一個圖像並對其進行處理。

+0

是的。視頻處理/流媒體的難點在於流量控制。由於他/她在接收器工作速度比處理器快的問題中說明,所以OP需要爲此確定策略。 –

+0

好的,所以在處理之前緩衝更多的數據。不知道爲什麼這是一個問題。他聽起來像他有更多的基本線程問題,而不是你所描述的。這是一個非常常見的問題,除了多重緩衝外,還有相同的機制解決,但這種緩衝僅僅是因爲你需要一個臨時的數據接收器。我們不需要這樣的接收器,因爲我們將完全接收的圖像放在隊列中,這正是他想要的。 –