Crate jo[−][src]
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 jo
annotation.
Usage
use std::sync::Mutex; use lazy_static::lazy_static; use jo::jo; // 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 #[jo(MUT_A)] fn function_a1() { // This will not run in parallel to function_a2 } #[jo(MUT_A)] fn function_a2() { // This will not run in parallel to function_a1 } #[jo(MUT_B)] fn function_b() { // This may run in parallel to function_a* }
Attribute Macros
jo |