2 个版本

0.1.1 2019 年 12 月 2 日
0.1.0 2019 年 12 月 2 日

#1122并发

MIT 许可证

24KB
249

运行时 构建状态 codecov GitHub 许可证 Dependabot 状态

run-down 包提供运行时保护实现。

概述

作为模式,运行时保护在需要重新初始化或销毁共享资源的情况下在 SMP 环境中很有用。

该模式有两个部分,一种保证资源可访问并保持访问状态的方法,以及一种使资源从某一点开始不可访问并等待所有未完成的访问结束,以便您可以安全地执行所需操作的方法。

此包的灵感来自 NT 内核中的 运行时保护原语。它在诸如驱动程序卸载等情况中使用,其中需要拒绝对驱动程序的进一步访问,并且卸载线程必须在驱动程序可以完全卸载之前等待进行中的访问停止。

文档

https://docs.rs/run-down

示例

use run_down::{
    RundownGuard,
    RundownRef
};
use std::sync::Arc;
use std::thread;
use std::time::Duration;

let rundown = Arc::new(RundownRef::new());

for i in 1..25 {

    let rundown_clone = Arc::clone(&rundown);

    thread::spawn(move || {
    
        // Attempt to acquire rundown protection, while the main
        // thread could be running down the object as we execute.
        // 
        match rundown_clone.try_acquire() {
            Ok(run_down_guard) => {
                println!("{}: Run-down protection acquired.", i);

                // Stall the thread while holding rundown protection.
                thread::sleep(Duration::from_millis(10));
            }
            Err(m) => {
                println!("{}: Failed to acquire run-down protection - {:?}", i, m);
            },
        }
    });
}

println!("0: Waiting for rundown to complete");
rundown.wait_for_rundown();
println!("0: Rundown complete");

TODO

  • 添加一个更有趣的实际示例。

  • 添加一些基准测试以查看是否有优化实现的机会。

注意:此包不是由、与或由微软创建、关联或支持。

依赖项

~340–630KB