TryLock

A light-weight lock guarded by an atomic boolean.

Most efficient when contention is low, acquiring the lock is a single atomic swap, and releasing it just 1 more atomic swap.

Example

```rust use std::sync::Arc; use try_lock::TryLock;

// a thing we want to share struct Widget { name: String, }

// lock it up! let widget1 = Arc::new(TryLock::new(Widget { name: "Spanner".into(), }));

let widget2 = widget1.clone();

// mutate the widget let mut locked = widget1.trylock().expect("example isn't locked yet"); locked.name.pushstr(" Bundle");

// hands off, buddy let notlocked = widget2.trylock(); assert!(notlocked.isnone(), "widget1 has the lock");

// ok, you can have it drop(locked);

let locked2 = widget2.try_lock().expect("widget1 lock is released");

assert_eq!(locked2.name, "Spanner Bundle"); ```