3 个不稳定版本
0.2.1 | 2024年7月14日 |
---|---|
0.2.0 | 2024年7月14日 |
0.1.0 | 2024年7月14日 |
#421 在 并发
每月315 次下载
15KB
299 行
microlock
微锁是一个用于等待的小型crate。它包含一个适用于复杂同步的无定时锁,以及一个也可以用作同步的定时锁,但还提供了定时器功能。
用例
无定时锁可以像通道一样使用,并增加了灵活性。在这个例子中,它简单地替换了通道,但与通道相比,更复杂的用例要简单得多。
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();
}
}