Skip to content
A lightweight lock protected by an atomic boolean.
Branch: master
Clone or download
Latest commit 90a6824 Jun 15, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
src v0.2.2 Jun 15, 2018
LICENSE v0.1.0 Mar 15, 2018 v0.1.0 Mar 15, 2018


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");
You can’t perform that action at this time.