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

README.md

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

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