Concurrency Coordination Reports
OnceLock Coordination Report
A write-once report records single initialization. This program offers a selected number of writes to a OnceLock and reports accepted versus rejected sets along with the stored value.
Program
Play the program to choose how many writes are offered and watch the cell accept the first and reject the rest.
once_lock_coordination_report.rs
use std::sync::OnceLock;
fn main() {
let writes = ;
let cell = OnceLock::new();
let mut accepted = 0;
let mut rejected = 0;
for value in 1..=writes {
match cell.set(value) {
Ok(()) => accepted += 1,
Err(_) => rejected += 1,
}
}
let stored = cell.get().copied();
let status = if accepted == 0 {
"unset"
} else if rejected > 0 {
"locked"
} else {
"set"
};
println!("accepted={accepted} rejected={rejected} stored={stored:?} {status}");
}
use std::sync::OnceLock;
fn main() {
let writes = ;
let cell = OnceLock::new();
let mut accepted = 0;
let mut rejected = 0;
for value in 1..=writes {
match cell.set(value) {
Ok(()) => accepted += 1,
Err(_) => rejected += 1,
}
}
let stored = cell.get().copied();
let status = if accepted == 0 {
"unset"
} else if rejected > 0 {
"locked"
} else {
"set"
};
println!("accepted={accepted} rejected={rejected} stored={stored:?} {status}");
}
use std::sync::OnceLock;
fn main() {
let writes = ;
let cell = OnceLock::new();
let mut accepted = 0;
let mut rejected = 0;
for value in 1..=writes {
match cell.set(value) {
Ok(()) => accepted += 1,
Err(_) => rejected += 1,
}
}
let stored = cell.get().copied();
let status = if accepted == 0 {
"unset"
} else if rejected > 0 {
"locked"
} else {
"set"
};
println!("accepted={accepted} rejected={rejected} stored={stored:?} {status}");
}
write-once cell
`OnceLock::set` accepts the first value and rejects every later write, so initialization happens exactly once.
stored value
`OnceLock::get` returns the stored value after a successful set and `None` before any set.
set report
The accepted and rejected counts report whether the cell stayed unset, was set once, or locked out a later write.