A timed lock. This can be locked and unlocked, and it will unlock on
its own after a timeout, if specified (see UntimedLock for a
non-expiring lock). If a thread calls wait_here on a locked lock, it will
wait until the lock is unlocked by another thread, or the lock expires.
An untimed lock. This can be locked and unlocked, but it will never unlock
on its own (see crate::TimedLock for an expiring lock). If a thread
calls wait_here on a locked lock, it will wait until the lock is unlocked
by another thread.