Tokio has owned guards for Arc<Mutex<T>> (and semaphores, etc.) that act like mutex guards but don't have lifetime parameters (i.e., are : 'static if T itself is). Why doesn't std or parking_lot?
Is this an idiom that is particularly necessary for async code?
Are owned guards easy to implement on top of std::sync?
The only thing it does is extend the lifetime on the guard to 'static. That makes it usable in more situations. I suppose the biggest downside might be that this makes it more trivial to "leak" the lock (e.g., storing it in a global cache without an invalidation policy) thus starving other waiters.
They are a bad idea in both sync and async code, but in async code you, often, don't have a choice because you want to keep lock while calling some function which-is-usually-very-quick-but-compiler-doesn't-know-that (and sometimes said function may not be quick at all).
If you really need them in sync code you can use parking_lot, but most of the time it's bad idea.