我想問你一個關於應該選擇哪種併發設施(CMutex,CSemaphore,CEvent)的問題,以便使C++/MFC應用程序成爲多線程。我應該選擇哪種同步方案來避免實時C++/MFC應用程序出現死鎖?
這是一個真正的時間,機器視覺應用程序,現在需要同時執行,它需要重構,從它的前一個單線程的地位。
我的工作流程的單個迭代如下。我有2個生產者A,B(MFC工人)需要填充兩個獨立的數據結構(每個1)。第三個線程,消費者(MFC工作者)也被阻止,直到兩個數據都可以從A和B獲得。然後,生產者A和B必須阻塞(每個數據完成時),C必須喚醒,執行計算,取消阻止A和B繼續並再次阻止,等待下一個分段。
- 我不能使用隊列(演員類) - 阻塞是一個要求 :(
- 我試圖CEvent的和它的作品AutoResetEvents爲A,B,以解除對C,然後一個 調用的CMultiLock。一個ManualResetEvent-> Set()從C到 取消阻止A和B等待後一個事件。我擔心的是什麼時候重置這個事件(例如A錯過整個Set然後Reset)
- Do信號量與多個2可能代表更好的解決方案?
此致敬禮。
使用條件變量API將程序限制爲僅在Windows Vista(Server 2008)或更高版本上運行 – bdonlan
我將繼續處理該問題。我不會做過早的優化;我將首先使用第二對CEvents進行工作。然後我會弄清楚,從用戶到內核空間的切換花費多少時間。 關於你的替代點。我真的需要爲每個使用的同步對象使用MFC包裝器嗎?我沒有太多的MFC併發應用程序的經驗。 –
另一件與我有關的事情是C工作者的取消,你如何安全地逃脫鎖定,沒有類似MsgWaitForMultipleObjects的可警告等待模式? –