我有一系列逻辑上连接的A,B和C对象集合,它们由writer线程,只读线程和读写线程访问。
每个A对象可以有几个相关的B对象,每个B对象可以有几个相关的C对象。一个B对象只能与一个A对象相关,同样,一个C对象只能与一个B和A对象相关。这意味着在更新A时,所有相关的B和C也必须被锁定,相反,如果更新C,相应的B和A也会被锁定?
如何实现这种结构的同步?
答案 0 :(得分:0)
更新A时,所有相关的B和 Cs也必须被锁定,并且在 反过来,如果更新C,那么 相应的B和A也被锁定
有了这个限制,你只需要为每组A及其相关的B和C需要一个互斥锁。这个互斥锁在逻辑上属于A对象,因为这些组中只有一个,但是在B和C对象中保留引用可能是明智的,这样当必须进行更新时可以直接从那里锁定它。 ,无需先遍历对象树来查找互斥锁。