| Crates.io | take_lock |
| lib.rs | take_lock |
| version | 0.1.11 |
| created_at | 2025-05-07 03:28:33.996817+00 |
| updated_at | 2025-05-07 03:42:16.499896+00 |
| description | a dead simple lock around Option |
| homepage | |
| repository | https://github.com/nevakrien/take_lock |
| max_upload_size | |
| id | 1663441 |
| size | 24,324 |
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.
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();