Crate try_lock

source ·
Expand description

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.


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");" Bundle");

// hands off, buddy
let not_locked = widget2.try_lock();
assert!(not_locked.is_none(), "widget1 has the lock");

// ok, you can have it

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

assert_eq!(, "Spanner Bundle");


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