Crates.io | microlock |
lib.rs | microlock |
version | 0.2.1 |
source | src |
created_at | 2024-07-14 00:00:56.090399 |
updated_at | 2024-07-14 02:22:42.562729 |
description | A crate for waiting: Small locks and other timing things! |
homepage | |
repository | https://git.tudbut.de/tudbut/microlock |
max_upload_size | |
id | 1302674 |
size | 15,797 |
Microlock is a smallish crate for waiting. It contains an UntimedLock suitable for complex synchronization, and a TimedLock that can also function as such, but additionally provides timer functionalities.
The untimed lock can be used similarly to a channel, with added flexibility. In this example, it simply replaces a channel, but more complex use-cases are significantly less trivial with channels.
use std::{
collections::VecDeque,
sync::{Arc, Mutex},
thread,
};
use microlock::{Lock, TimedLock, UntimedLock};
fn main() {
static LOCK: UntimedLock = UntimedLock::locked();
let queue = Arc::new(Mutex::new(VecDeque::new()));
let queue2 = queue.clone();
thread::spawn(move || loop {
LOCK.wait_here();
println!("{}", queue2.lock().unwrap().pop_front().unwrap());
LOCK.lock();
});
let timer = TimedLock::unlocked();
for i in 0..5 {
timer.lock_for_ms(100);
println!("Sending {i}...");
queue.lock().unwrap().push_back(format!("Hello! {i}"));
LOCK.unlock();
println!("Sent!");
timer.wait_here();
}
}