#parallel #testing #macro #lock #concurrency

nonparallel

Rust宏,用于确保函数的非并行执行。(已弃用,请使用serial_test代替。)

2个版本

0.1.1 2023年7月17日
0.1.0 2019年10月9日

#43 in #concurrent

MIT/Apache

8KB

nonparallel

CircleCI Crates.io Version Crates.io Downloads License

⚠️ 注意: 此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*
}

许可证

根据您的选择,许可如下

依赖关系

~1.5MB
~35K SLoC