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