The solution used in IDVI is a vastly simplified one, but one which was certainly not obvious
at first: use a single ReadWriteLock to control access to the entire hierarchy. As long as
individual accesses are relatively fine-grained, this provides sufficient opportunity for
multi-threading while reducing complexity and eliminating the possibility of deadlock.
In general, consider using a single lock to control access to a large complicated data structure,
instead of synchronizing access to each part of the data structure.