try-lock-portable-atomic

Crates.iotry-lock-portable-atomic
lib.rstry-lock-portable-atomic
version0.2.5-patch0
created_at2025-10-21 08:38:57.314473+00
updated_at2025-10-21 08:38:57.314473+00
descriptionA lightweight atomic lock.
homepagehttps://github.com/ariel-os/try-lock-portable-atomic
repositoryhttps://github.com/ariel-os/try-lock-portable-atomic
max_upload_size
id1893440
size14,169
(chrysn)

documentation

https://docs.rs/try-lock-portable-atomic

README

Soft fork: TryLock with Portable Atomics

This repository and the crate try-lock-portable-atomics is a soft fork of the try-lock crate.

This fork only applies PR #11 and the necessary metadata changes; otherwise, it tracks upstream 1:1.

Original README below.


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");
Commit count: 0

cargo fmt