take_lock

Crates.iotake_lock
lib.rstake_lock
version0.1.11
created_at2025-05-07 03:28:33.996817+00
updated_at2025-05-07 03:42:16.499896+00
descriptiona dead simple lock around Option> thats similar in spirit to OnceLock but adds a bit more flexibility by paying a bit in performance
homepage
repositoryhttps://github.com/nevakrien/take_lock
max_upload_size
id1663441
size24,324
(nevakrien)

documentation

README

take_lock

TakeLock is a minimal, thread-safe container for passing ownership of a single Box<T> between threads.

It provides an atomic, lock-free way to put, take, or swap a value across threads. This is implemented with a fairly straight forward use of atomics.

Example

use take_lock::TakeLock;
use std::thread;

let lock = std::sync::Arc::new(TakeLock::default());

let sender = {
    let lock = lock.clone();
    thread::spawn(move || {
        lock.put(Some(Box::new(123))).unwrap();
    })
};

let receiver = {
    let lock = lock.clone();
    thread::spawn(move || {
        loop {
            if let Some(val) = lock.take() {
                assert_eq!(*val, 123);
                break;
            }
        }
    })
};

sender.join().unwrap();
receiver.join().unwrap();

Commit count: 4

cargo fmt