我正在编写一个基于读取&编辑大型,相当复杂(多文档)XML结构的GUI应用程序。 GUI本身主要基于数据绑定,因此大部分与XML的交互都将通过一个基于对象的模型在UI线程上完成,该模型涵盖了使用LINQ to XML,但是我知道一些操作(例如搜索和加载)将需要在后台线程上执行,因此我需要确保我们以线程安全的方式访问此XML。锁定/线程安全访问XObject
它很容易对我来说足够,以确保XML的所有编辑是线程安全的(例如,全球锁或由UI线程上执行所有的编辑),但我注意到,为XObject状态
文档此类型的任何公共静态成员都是线程安全的。 任何实例成员不保证是线程安全的。
这意味着我必须同步所有访问在我的应用程序中使用的任何XObject
实例。不幸的是,由于我的对象模型运行的方式,我很难确保我的模型中的任何对象的最多1个实例可以访问任何给定的XObject
,这意味着我无法通过锁定私有对象来确保线程安全(通常是防止死锁的最佳实践)。
在这种情况下,是否可以直接在XObject
本身上使用锁定来保证线程安全,或者是否有替代方案?
我也想过使用注释,但是用于访问注释的方法也不是线程安全的,所以这仍然需要使用一些其他外部机制来同步对注释的访问。 – Justin