June 2019, rev. October 2019

In a language that makes multiple copies instead of use garbage collection, assignment of locks needs an extra check. eg in:

(= l1 (lock))
(= l2 l1)

That's because it shouldn't be possible to copy locks. A lock with multiple copies floating around wouldn't be exclusive. So when a copy is made, the language has to distinguish between the original lock and a reference to it. The copy of the lock must be a reference to the original lock.

In a language that uses one reference only instead of use garbage collection, I don't see it possible to assign locks and distinguish between the original lock and a reference to it without making a copy. One reference only must copy locks.