2011-03-10 41 views
0

我有一系列逻辑连接的A,B和C对象的集合,它们是由编写器线程,只读线程和读写线程访问的。如何实现分层锁定或其他同步模式?

每个对象都可以有多个相关的B对象,每个B对象可以有多个相关的C对象。一个B对象只能与一个A对象相关,同样,一个C对象只能与一个B和A对象相关。这意味着当更新A时,所有相关的Bs和Cs也必须被锁定,反之,如果更新C,相应的B和A也被锁定?

我该如何实现这种结构的同步?

+2

为什么他们都被锁定?他们在彼此之间分享任何信息吗?如果他们没有,那么就不需要全部锁定。如果他们这样做,设计没有优化。 – Aliostad 2011-03-10 23:37:59

+0

@Aliostad他们不共享状态,但从业务角度来看,他们需要一起访问(阅读),但可以单独更新。如果这种设计(一种分层结构)没有得到优化,那么什么是好设计? – anchandra 2011-03-11 14:46:04

回答

0

更新时,凡是涉及烧烤和 CS必须也被锁定,并且在 反向,如果更新C,所述 对应B和A也被锁定

由于此限制在对于每组A和其相关的Bs和Cs,只需要一个互斥量。这个互斥体在逻辑上属于A对象,因为只有一个这样的组,所以在B和C对象中保留一个引用可能是明智的,所以当必须进行更新时,它可以直接从那里锁定而无需首先遍历对象树来查找互斥锁。