# try_lock - Rust
API documentation for the Rust `try_lock` crate.
Keywords: rust, rustlang, rust-lang, try_lock

# Crate try_lock [−] [src]

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

    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.try_lock().expect("example isn't locked yet");
    locked.name.push_str(" Bundle");

    // hands off, buddy
    let not_locked = widget2.try_lock();
    assert!(not_locked.is_none(), "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");

## Structs

Locked | A locked value acquired from a `TryLock`.
TryLock | A light-weight lock guarded by an atomic boolean.