static mut GLOBAL: (AtomicBool, Option<&'static T>) = (AtomicBool::new(false), None);
match GLOBAL.0.compare_and_swap(false, true, AcqRel) {
true => {
loop {
match GLOBAL.1 {
Some(t) => t,
None => continue,
}
},
false => {
let a = Box::leak(Box::new(T::default()));
unsafe { GLOBAL = Some(a); }
a
}
}
Нуладна.
а не проще lazy_static/once_cell?