I think the only way to do that would be to have a reentrant lock for each object individually. Isn't that potentially a big performance issue?
I think that is the main reason behind this quote from the article:
> Several attempts have been made over the years and failed to do it without sacrificing single-threaded performance.