Mutex<T> owns its data. There is no way to reach the value without locking, so "forgot to take the lock" is not a bug you can write.
let mut guard = counter.lock().unwrap();
*guard += 1;
lock() returns Result<MutexGuard<T>, PoisonError<_>>. The guard derefs to &mut T, and releases the lock when it drops. There is no unlock().
