An interleaved replay has one global order while each event still belongs to an owner. This program summarizes the ordered prefix.

Program

Play the program to choose a maximum step and watch owner totals accumulate in order.

interleaved_owner_summary_rust.rs
fn main() {
    let max_step: usize = ;
    let owners = ["main", "worker", "main", "worker"];
    let deltas = [1, 2, 3, 4];
    let mut main_total = 0;
    let mut worker_total = 0;
    for i in 0..max_step {
        if owners[i] == "main" {
            main_total += deltas[i];
        } else {
            worker_total += deltas[i];
        }
    }
    println!("{main_total}:{worker_total}");
}
fn main() {
    let max_step: usize = ;
    let owners = ["main", "worker", "main", "worker"];
    let deltas = [1, 2, 3, 4];
    let mut main_total = 0;
    let mut worker_total = 0;
    for i in 0..max_step {
        if owners[i] == "main" {
            main_total += deltas[i];
        } else {
            worker_total += deltas[i];
        }
    }
    println!("{main_total}:{worker_total}");
}
fn main() {
    let max_step: usize = ;
    let owners = ["main", "worker", "main", "worker"];
    let deltas = [1, 2, 3, 4];
    let mut main_total = 0;
    let mut worker_total = 0;
    for i in 0..max_step {
        if owners[i] == "main" {
            main_total += deltas[i];
        } else {
            worker_total += deltas[i];
        }
    }
    println!("{main_total}:{worker_total}");
}
global order `max_step` selects a prefix of the ordered event list.
owner state Each event updates the total for its owner.
interleaving The loop alternates owners without using real threads.