This needs to be fleshed out. With per-object locking, it might make sense to just treat the whole system like a multi-threaded environment where each object can be locked for read/write by one thread (client) like a mutex.
There's more to work out here. Like how to manage state for hashes and names files with multiple active clients. And how to actually keep track of locks ergonomically.