#parallel #testing #lock #macro #concurrency

macro 非并行异步

确保异步函数非并行执行的Rust宏

1 个不稳定版本

0.1.0 2022年12月29日

#2044 in 进程宏

MIT/Apache

8KB

非并行

CircleCI Crates.io Version Crates.io Downloads License

Rust的进程宏,允许您确保函数不会同时运行。这在集成测试中特别有用,其中写入同一数据库表的测试不应并行运行。

通过在注解函数的开始处获取互斥锁来实现互斥的目的。因此,本质上这个宏是在每个函数开始处编写 MUT.lock().unwrap() 的语法糖。

不同的函数可以同步在不同的互斥锁上。这就是为什么必须将静态互斥锁引用传递给 非并行 注解的原因。

用法

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