2015-11-13 44 views
0

我用C++編寫了一個軟件,用於使用openCV庫處理來自相機的視頻流。 我想在處理視頻幀時保存視頻幀,以便有可能使用與輸入視頻完全相同的視頻多次離線運行代碼。 我正在考慮使用生產者/消費者模式使用多線程。使用多線程進行圖像細化和保存

我的想法是有一個生產者(圖像採集卡)和兩個消費者(一個用於處理圖像,另一個用於保存文件上的幀(如視頻))。

我沒有多線程編程經驗,所以我在網上搜索了一些教程。 我發現的所有教程都是關於一個生產者和一個消費者的,但我需要的是稍微不同的:我的需求應該是一個生產者,向兩個消費者發送相同的圖像,並且在兩個消費者完成他們的工作後,繼續下一幀。重點是生產者將有一個隊列存儲幀,而消費者都需要從同一個隊列讀取同一個元素。

你有什麼建議嗎? 你認爲我選擇的模式適合我的需要嗎?

謝謝。

+0

你的意思是*將圖像發送給2位消費者?當然,你只需將它放在共享內存中,讓它們訪問它,而不是將它發送到任何地方。我沒有看到發送它兩次的意義 - 讓每個人都可以隨意訪問它,然後每個人都可以指出它們何時完成,這告訴你可以覆蓋它。同樣考慮使用幾幀的緩衝區,以便例如可以容忍磁盤寫入速度的微小變化。 –

回答

1

生產者 - 消費者的作品。就你而言,製片人可以「產生」兩次,首先將其放入處理隊列中,然後將第二個副本放入保存隊列中。

+0

但是這需要生產者使用兩個不同的互斥鎖,每個隊列一個互斥鎖?對? – Alek

+0

是的,使用2個互斥體是最好的。您需要確保共享數據不受併發訪問的影響。使用2個互斥體(而不是一個互斥體)確保兩個消費者彼此獨立。 –