#互斥锁 # #命名 #同步 #异步 #mutex-locker

locker

为 rust-lang 并发提供的简单命名互斥锁/存储柜

8 个不稳定版本 (3 个破坏性更新)

0.4.3 2020 年 6 月 21 日
0.4.2 2020 年 6 月 21 日
0.4.0 2020 年 3 月 29 日
0.3.1 2020 年 3 月 28 日
0.1.0 2019 年 10 月 29 日

#36 in #命名

MIT 许可证

11KB
173

存储柜

实用工具 locker - Rust 并发的简单异步/同步存储柜。

异步示例

use std::time::Duration;
use locker::AsyncLocker;
use tokio::time::delay_for;

let default_mutex_value = "value";
let locker = AsyncLocker::<i32, &str>::new_custom(move || default_mutex_value);
let mutex = locker.get_mutex(1).await;
let _guard = mutex.lock().await; // lock
let locker_clone = locker.clone();
tokio::spawn(async move {
    let mutex = locker.get_mutex(1).await;
    let value = mutex.lock().await; // wait
    assert_eq!(default_mutex_value, *value);
});
delay_for(Duration::from_millis(200)).await;

同步示例

use std::time::Duration;
use std::thread;
use locker::SyncLocker;

let locker = SyncLocker::new();
let mutex = locker.get_mutex(1);
let _guard = mutex.lock().unwrap(); // lock
let locker_clone = locker.clone();
thread::spawn(move || {
    let mutex = locker.get_mutex(1);
    let _guard = mutex.lock().unwrap(); // wait
});
thread::sleep(Duration::from_millis(200));

运行测试

要运行测试

cargo test -- --nocapture

依赖项

~0–0.8MB
~12K SLoC