7 个版本

使用旧的 Rust 2015

0.2.5 2023 年 12 月 7 日
0.2.4 2023 年 1 月 6 日
0.2.3 2020 年 7 月 10 日
0.2.2 2018 年 6 月 15 日
0.1.0 2018 年 3 月 15 日

#31 in 并发

Download history · Rust 包仓库 1401018/week @ 2024-04-15 · Rust 包仓库 1429242/week @ 2024-04-22 · Rust 包仓库 1318936/week @ 2024-04-29 · Rust 包仓库 1324448/week @ 2024-05-06 · Rust 包仓库 1409422/week @ 2024-05-13 · Rust 包仓库 1382827/week @ 2024-05-20 · Rust 包仓库 1364740/week @ 2024-05-27 · Rust 包仓库 1535635/week @ 2024-06-03 · Rust 包仓库 1499039/week @ 2024-06-10 · Rust 包仓库 1469032/week @ 2024-06-17 · Rust 包仓库 1504607/week @ 2024-06-24 · Rust 包仓库 1357363/week @ 2024-07-01 · Rust 包仓库 1503879/week @ 2024-07-08 · Rust 包仓库 1498356/week @ 2024-07-15 · Rust 包仓库 1578877/week @ 2024-07-22 · Rust 包仓库 1581992/week @ 2024-07-29 · Rust 包仓库

6,237,324 每月下载量
18,607 个 Crates (直接使用 7 个) 中使用

MIT 许可证

11KB
137 代码行

TryLock

由原子布尔值保护的轻量级锁。

当竞争较低时效率最高,获取锁是单个原子交换,释放锁只需再进行一次原子交换。

示例

use std::sync::Arc;
use try_lock::TryLock;

// a thing we want to share
struct Widget {
    name: String,
}

// lock it up!
let widget1 = Arc::new(TryLock::new(Widget {
    name: "Spanner".into(),
}));

let widget2 = widget1.clone();


// mutate the widget
let mut locked = widget1.try_lock().expect("example isn't locked yet");
locked.name.push_str(" Bundle");

// hands off, buddy
let not_locked = widget2.try_lock();
assert!(not_locked.is_none(), "widget1 has the lock");

// ok, you can have it
drop(locked);

let locked2 = widget2.try_lock().expect("widget1 lock is released");

assert_eq!(locked2.name, "Spanner Bundle");

lib.rs:

由原子布尔值保护的轻量级锁。

当竞争较低时效率最高,获取锁是单个原子交换,释放锁只需再进行一次原子交换。

示例

use std::sync::Arc;
use try_lock::TryLock;

// a thing we want to share
struct Widget {
    name: String,
}

// lock it up!
let widget1 = Arc::new(TryLock::new(Widget {
    name: "Spanner".into(),
}));

let widget2 = widget1.clone();


// mutate the widget
let mut locked = widget1.try_lock().expect("example isn't locked yet");
locked.name.push_str(" Bundle");

// hands off, buddy
let not_locked = widget2.try_lock();
assert!(not_locked.is_none(), "widget1 has the lock");

// ok, you can have it
drop(locked);

let locked2 = widget2.try_lock().expect("widget1 lock is released");

assert_eq!(locked2.name, "Spanner Bundle");

无运行时依赖