锁定/线程安全访问XObject

时间:2012-08-22 10:15:29

标签: c# thread-safety locking linq-to-xml

我正在编写一个基于阅读和阅读的GUI应用程序。编辑大型,相当复杂(多文档)的XML结构。 GUI本身主要基于数据绑定,因此大多数与XML的交互将通过基于对象的模型在UI线程上完成,该模型在幕后使用LINQ to XML,但是我知道一些操作(例如搜索和loading)需要在后台线程上执行,所以我需要确保我们以线程安全的方式访问这个XML。

我很容易确保所有XML编辑都是线程安全的(例如使用全局锁或通过在UI线程上执行所有编辑),但我注意到XObject状态的文档< / p>

  

此类型的任何公共静态成员都是线程安全的。 不保证所有实例成员都是线程安全的。

这意味着我必须同步对我的应用程序中使用的所有 XObject实例的所有访问权限。不幸的是,由于我的对象模型的运行方式,我很难确保模型中任何对象的最多1个实例都可以访问任何给定的XObject,这意味着我无法确保线程安全锁定私有对象(通常是防止死锁的最佳做法)。

在这种情况下,可以直接在XObject上使用锁定以确保线程安全,还是有替代方案?

1 个答案:

答案 0 :(得分:0)

我不建议锁定XObject本身。它可能会起作用,但它通常不是一个好的解决方案(因为任何人都可以这样做)。你可以做的是在XObject上添加一个私有注释并锁定它。通过使用只能由您访问的类型的对象(因此在程序集内部),可以将注释设为私有。由于要查找注释,需要知道其类型,如果类型是“私有”,则其他任何人都无法查找。

相关问题