Replay Composition
Interleaved Owner Summary
Preserve Order
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.