This function places an advisory lock on a shared variable or referenced object contained in THING until the lock goes out of scope.
The value returned is the scalar itself, if the argument is a scalar, or a reference, if the argument is a hash, array or subroutine.
lock is a "weak keyword"; this means that if you've
defined a function
by this name (before any calls to it), that function will be called
instead. If you are not under
this does nothing.