.net 如何实现分层锁或其他同步模式?

.net 如何实现分层锁或其他同步模式?,.net,multithreading,caching,atomic,.net,Multithreading,Caching,Atomic,我有一系列逻辑连接的a、B和C对象集合,它们由编写器线程、只读线程和读写线程访问 每个A对象可以有几个相关的B对象,每个B对象可以有几个相关的C对象。一个B对象只能与一个A对象相关,类似地,一个C对象只能与一个B和一个对象相关。这意味着当更新A时,所有相关的B和C也必须被锁定,反之,如果更新A C,相应的B和A也被锁定 如何实现这种结构的同步 更新A时,所有相关B和 Cs也必须被锁定,并且处于 相反,如果更新C,则 相应的B和A也被锁定 有了这个限制,您只需要为每组A及其关联的B和C设置一个互斥

我有一系列逻辑连接的a、B和C对象集合,它们由编写器线程、只读线程和读写线程访问

每个A对象可以有几个相关的B对象,每个B对象可以有几个相关的C对象。一个B对象只能与一个A对象相关,类似地,一个C对象只能与一个B和一个对象相关。这意味着当更新A时,所有相关的B和C也必须被锁定,反之,如果更新A C,相应的B和A也被锁定

如何实现这种结构的同步

更新A时,所有相关B和 Cs也必须被锁定,并且处于 相反,如果更新C,则 相应的B和A也被锁定


有了这个限制,您只需要为每组A及其关联的B和C设置一个互斥。该互斥体在逻辑上属于A对象,因为组中只有一个互斥体,但在B和C对象中保留一个引用可能是明智的,这样当必须进行更新时,就可以直接从那里锁定互斥体,而不必首先遍历对象树来找到互斥体。

为什么它们都必须被锁定?他们之间是否共享任何信息?如果没有,则无需锁定所有。如果他们这样做,设计就不会得到优化。@Aliostat他们不共享状态,但从业务角度来看,他们需要一起访问(用于阅读),但可以单独更新。如果这个设计(层次结构)没有得到优化,那么什么是好的设计?