Having both `isLocked` and `lock` makes the feature non-atomic.
I think it would be better to remove `isLocked` and keep only `lock`, making it return `true/false` (and non blocking as it already is)