3 个版本
| 0.1.3 | 2023 年 11 月 30 日 |
|---|---|
| 0.1.2 | 2023 年 11 月 22 日 |
| 0.1.1 |
|
| 0.1.0 | 2023 年 11 月 20 日 |
#315 在 并发
每月 36 次下载
57KB
936 行
sparking-lot-core
s(implified-)parking-lot-core 是 parking_lot_core 的简化版本,它是 parking_lot 的后端。它不包括超时和 park/unpark 令牌,并且不会根据线程数量进行调整,因此当线程数量超过一定数量(默认为 96,使用 more-concurrency 功能时为 384)时,其扩展性将比 parking_lot_core 差。然而,它具有静态内存使用,最重要的是,sparking-lot-core 支持 loom 0.7 并发测试,使用 --cfg loom。
使用方法
首先,将以下内容添加到您的 Cargo.toml 中
[dependencies]
sparking-lot-core = "0.1"
然后使用它
use sparking_lot_core::{park, unpark_one};
use std::sync::atomic::{AtomicBool, Ordering::Relaxed};
use std::thread;
fn main() {
static WAKE_UP: AtomicBool = AtomicBool::new(false);
let t = thread::spawn(|| {
unsafe{
park(&WAKE_UP as *const _ as *const _, || {
!WAKE_UP.load(Relaxed)
});
};
});
/* Since Relaxed stores/loads are used, this wouldn't guarantee
* the ordering of loads/stores to other variables.
*
* But this is guaranteed to exit.
*/
WAKE_UP.store(true, Relaxed);
unpark_one(&WAKE_UP as *const _ as *const _);
t.join().unwrap();
}
loom
loom 通过 --cfg loom 启用。当运行 loom 测试时,建议启用 loom-test 功能,因为默认的测试实现非常有限。旧的行为在 文档 中描述。
许可证
本项目采用 MIT 许可证
依赖关系
~0–25MB
~334K SLoC