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