我所拥有的简化结构是:
用户可以更新根信息,不允许对儿童进行其他操作(因为根更改可能会影响所有这些操作)。
此外,用户可以对孩子进行操作(当然,如果root不在使用中)。例如,用户可以在同一时间更换2个孩子,这是允许的,因为每个孩子都是独立的。
我需要在此结构中使用锁定以确保没有损坏:
让我困扰的是需要锁定所有孩子 - 在分布式系统中,这意味着将多个请求发送到分布式锁定。
有没有更好的解决方案我不明白?
答案 0 :(得分:0)
你错过了两件事。首先,只要没有人写入节点,多个线程同时从节点读取就是安全的。其次,子节点可以被视为它们自己的较小树的根,因此相同的算法/解决方案可以应用于除叶节点之外的所有节点。第一个是最重要的。以下是您如何做到这一点:
在树中的所有节点上使用读/写互斥锁。这允许任意数量的进程同时读取,或者单个进程随时写入节点。
阅读:
写:
这意味着可以同时修改两个兄弟节点,并且可以同时执行任意数量的读取。但是,读取的成本是你需要获取O(log100(tree_height))读锁,对于每个级别大约有100个孩子的树。它不太可能是一个真正的问题,除非你的树很大,对同一叶子节点的读写次数非常多。
这假设没有孩子可以修改其父母。