This function places an advisory lock on a shared variable, or referenced object contained in THING until the lock goes out of scope.
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. (However, if you've said use threads
, lock() is always a
keyword.) See threads.