2个版本
0.1.1 | 2023年7月17日 |
---|---|
0.1.0 | 2019年10月9日 |
#43 in #concurrent
8KB
nonparallel
⚠️ 注意: 此crate已被弃用且未维护。您应使用
serial_test
代替,它比nonparallel
更强大。
这是一个Rust过程宏,允许您确保函数不会同时运行。这对于集成测试特别有用,其中写入同一数据库表的测试不应并行运行。
通过在注释函数的开始处获取互斥锁来实现互斥排他。因此,本质上这个宏是每个函数开始处编写 MUT.lock().unwrap()
的语法糖。
不同的函数可以在不同的互斥锁上进行同步。这就是为什么必须将静态互斥锁引用传递给nonparallel
注释的原因。
用法
use std::sync::Mutex;
use lazy_static::lazy_static;
use nonparallel::nonparallel;
// Create two locks
lazy_static! { static ref MUT_A: Mutex<()> = Mutex::new(()); }
lazy_static! { static ref MUT_B: Mutex<()> = Mutex::new(()); }
// Mutually exclude parallel runs of functions using those two locks
#[nonparallel(MUT_A)]
fn function_a1() {
// This will not run in parallel to function_a2
}
#[nonparallel(MUT_A)]
fn function_a2() {
// This will not run in parallel to function_a1
}
#[nonparallel(MUT_B)]
fn function_b() {
// This may run in parallel to function_a*
}
许可证
根据您的选择,许可如下
- Apache License,版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
依赖关系
~1.5MB
~35K SLoC