Protocol for types implementing mutex-like semantics.
Implemented by e.g. Mutex and Spinlock.
Acquires the lock
Releases the lock