2013-04-20 48 views
2

異步調用我有大約10個對象。每個對象都是不同的類。發送給這些對象的請求(具有返回值的方法調用)來自不同的線程。同步從多於一個對象

我需要將這些方法調用同步,只有一個必須在同一時間執行。有些請求的優先級高於其他請求。這意味着如果有更多的請求等待執行,而另一個請求被髮送 - 比其他任何等待執行的優先級更高,則它將作爲下一個執行。

我不知道如何在C解決這個問題++。我在考慮Command模式,但它需要大量的「手動」編碼。我將不得不將每個方法調用轉換爲一個命令對象。問題在於回報價值。 有沒有人有想法,可以在這裏使用什麼樣的模式?

回答

4

爲了同步,可以使得僅一次一個線程被操縱對象使用某種形式的mutual exclusion

與優先級處理,你可能會想用一個比較器priority queue用於確定哪些請求類型具有更高的優先地位的標準。

每個對象都將接受請求做一個動作,它會與它相關聯的優先級和動作(如你在命令模式的建議)。使用鎖定機制,它會通過添加記錄來更新優先級隊列,然後釋放它。它必須鎖定隊列,因爲它是通過多線程訪問的。不需要明確的排序 - 隊列總是按照最高優先級排序。因此,要處理命令,只需獲取隊列中的第一個項目(如果有),然後執行操作。

+0

+1。對於C++理想優先級隊列,請參見['std :: priority_queue <>'](http://en.cppreference.com/w/cpp/container/priority_queue)上的文檔。如果使用符合C++ 11標準的工具鏈,那麼標準的[線程支持庫](http://en.cppreference.com/w/cpp/thread)可能也會提供信息和幫助。 – WhozCraig 2013-04-20 04:45:35

+0

是不是某種主動對象模式(POSA)?我想我可以遵循這種模式,並使激活列表成爲優先隊列。 – user2301299 2013-04-20 04:47:53

+0

我正在使用C++(我的意思不是C++ 11)。我也可以使用提升。 – user2301299 2013-04-20 04:49:05