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