Crate nonparallel

source ·
Expand description

A procedural macro for Rust that allows you to ensure that functions (e.g. unit tests) are not running at the same time.

This is achieved by acquiring a mutex at the beginning of the annotated function.

Different functions can synchronize on different mutexes. That’s why a static mutex reference must be passed to the nonparallel annotation.

Usage

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*
}

Attribute Macros