我正在編寫一個基於讀取&編輯大型,相當複雜(多文檔)XML結構的GUI應用程序。 GUI本身主要基於數據綁定,因此大部分與XML的交互都將通過一個基於對象的模型在UI線程上完成,該模型涵蓋了使用LINQ to XML,但是我知道一些操作(例如搜索和加載)將需要在後臺線程上執行,因此我需要確保我們以線程安全的方式訪問此XML。鎖定/線程安全訪問XObject
它很容易對我來說足夠,以確保XML的所有編輯是線程安全的(例如,全球鎖或由UI線程上執行所有的編輯),但我注意到,爲XObject狀態
文檔此類型的任何公共靜態成員都是線程安全的。 任何實例成員不保證是線程安全的。
這意味着我必須同步所有訪問在我的應用程序中使用的任何XObject
實例。不幸的是,由於我的對象模型運行的方式,我很難確保我的模型中的任何對象的最多1個實例可以訪問任何給定的XObject
,這意味着我無法通過鎖定私有對象來確保線程安全(通常是防止死鎖的最佳實踐)。
在這種情況下,是否可以直接在XObject
本身上使用鎖定來保證線程安全,或者是否有替代方案?
我也想過使用註釋,但是用於訪問註釋的方法也不是線程安全的,所以這仍然需要使用一些其他外部機制來同步對註釋的訪問。 – Justin