That's how Tcl does it. Each thread gets its own Tcl interpreter, and you communicate among them via message passing. It lets you avoid the context switch that way.
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.