2011-04-14 59 views
1

我有一个关于大型应用程序中的并行化和线程锁定同步的稍微更一般的问题。我正在研究具有深层架构的大量对象类型的应用程序,该架构也利用了大多数关键任务的并行处理。目前,系统中的每个对象都使用线程锁定管理进行同步。问题在于锁定范围只与每个对象一样大,而对象属性则通过许多不同的对象传递,其中属性失去了同步保护。线程锁定在大Parralel应用程序中

什么是线程管理的最佳实践,'同步上下文'& c。在大型应用程序?似乎唯一的万无一失的解决方案是使数据同步应用程序范围广泛,使得数据可以随时被任何对象安全地使用,但这似乎违反了面向对象的编码概念。

如何最好地管理此问题?

非常感谢,

Jilbruke

回答

1

一种方法是使你的对象只读的;一个只读对象不需要任何同步,因为任何线程在其他线程写入时都没有机会读取它(因为没有线程写入它)。对象生存期问题可以使用无锁定引用计数来处理(使用原子计数器进行线程安全)。

当然不好的一面是,如果你真的想改变一个物体的状态,你不能;您必须创建一个新对象,该对象是旧对象的副本,但更改后的部分除外。根据您的应用程序的作用,该开销可能会或可能不被接受。

+0

该系统涉及高频率消耗和属性值失效,因此维护引用将是首选。对象内的线程管理很好,但是当一个线程想要使属性无效时,它会通过对象中的正确通道,但是当为了更新视图而消耗该值时,线程安全的唯一方法是让视图参与底层对象的锁定机制,这意味着它不能对其结构不可知。 – 2011-04-14 20:09:50

+0

_是否有任何锁定对象公开暴露的有效模式? – 2011-04-14 20:19:18