3 个版本

0.1.3 2023 年 11 月 30 日
0.1.2 2023 年 11 月 22 日
0.1.1 2023 年 11 月 22 日
0.1.0 2023 年 11 月 20 日

#315并发

每月 36 次下载

MIT 许可证

57KB
936

sparking-lot-core

s(implified-)parking-lot-coreparking_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