Right now we have `Lock` and `TryLockOne`, it would be great to add more locking algorithms to fit more use cases. For example: - **LockOne:** equivalent to TryLockOne but blocks until it could acquire a lock - **TryLock:** just like Lock but non-blocking - ???