2011-04-14 58 views
1

我有一個關於大型應用程序中的並行化和線程鎖定同步的稍微更一般的問題。我正在研究具有深層架構的大量對象類型的應用程序,該架構也利用了大多數關鍵任務的並行處理。目前,系統中的每個對象都使用線程鎖定管理進行同步。問題在於鎖定範圍只與每個對象一樣大,而對象屬性則通過許多不同的對象傳遞,其中屬性失去了同步保護。線程鎖定在大Parralel應用程序中

什麼是線程管理的最佳實踐,'同步上下文'& c。在大型應用程序?似乎唯一的萬無一失的解決方案是使數據同步應用程序範圍廣泛,使得數據可以隨時被任何對象安全地使用,但這似乎違反了面向對象的編碼概念。

如何最好地管理此問題?

非常感謝,

Jilbruke

回答

1

一種方法是使你的對象只讀的;一個只讀對象不需要任何同步,因爲任何線程在其他線程寫入時都沒有機會讀取它(因爲沒有線程寫入它)。對象生存期問題可以使用無鎖定引用計數來處理(使用原子計數器進行線程安全)。

當然不好的一面是,如果你真的想改變一個物體的狀態,你不能;您必須創建一個新對象,該對象是舊對象的副本,但更改後的部分除外。根據您的應用程序的作用,該開銷可能會或可能不被接受。

+0

該系統涉及高頻率消耗和屬性值失效,因此維護引用將是首選。對象內的線程管理很好,但是當一個線程想要使屬性無效時,它會通過對象中的正確通道,但是當爲了更新視圖而消耗該值時,線程安全的唯一方法是讓視圖參與底層對象的鎖定機制,這意味着它不能對其結構不可知。 – 2011-04-14 20:09:50

+0

_是否有任何鎖定對象公開暴露的有效模式? – 2011-04-14 20:19:18