Module rtic::mutex_prelude[][src]

Makes locks work on N-tuples, locks the mutexes from left-to-right in the tuple. These are used to reduce rightward drift in code and to help make intentions clearer.

Example

use mutex_trait::prelude::*;

fn normal_lock(
    a: &mut impl Mutex<T = i32>,
    b: &mut impl Mutex<T = i32>,
    c: &mut impl Mutex<T = i32>
) {
    // A lot of rightward drift...
    a.lock(|a| {
        b.lock(|b| {
            c.lock(|c| {
                *a += 1;
                *b += 1;
                *c += 1;
            });
        });
    });
}

Has a shorthand as:

use mutex_trait::prelude::*;

fn tuple_lock(
    a: &mut impl Mutex<T = i32>,
    b: &mut impl Mutex<T = i32>,
    c: &mut impl Mutex<T = i32>
) {
    // Look! Single indent and less to write
    (a, b, c).lock(|a, b, c| {
        *a += 1;
        *b += 1;
        *c += 1;
    });
}

Traits

Mutex

Memory safe access to shared resources

TupleExt01

Auto-generated tuple implementation, see Mutex for details.

TupleExt02

Auto-generated tuple implementation, see Mutex for details.

TupleExt03

Auto-generated tuple implementation, see Mutex for details.

TupleExt04

Auto-generated tuple implementation, see Mutex for details.

TupleExt05

Auto-generated tuple implementation, see Mutex for details.

TupleExt06

Auto-generated tuple implementation, see Mutex for details.

TupleExt07

Auto-generated tuple implementation, see Mutex for details.

TupleExt08

Auto-generated tuple implementation, see Mutex for details.

TupleExt09

Auto-generated tuple implementation, see Mutex for details.

TupleExt10

Auto-generated tuple implementation, see Mutex for details.

TupleExt11

Auto-generated tuple implementation, see Mutex for details.

TupleExt12

Auto-generated tuple implementation, see Mutex for details.