use std::{
sync::atomic::{AtomicBool, Ordering},
thread,
};
#[inline(always)]
fn spin_hint() {
std::hint::spin_loop();
}
pub(crate) fn adaptive_wait(cond: &AtomicBool) {
for _ in 0..10 {
if cond.load(Ordering::Acquire) {
return;
}
spin_hint();
}
for _ in 0..20 {
if cond.load(Ordering::Acquire) {
return;
}
thread::yield_now();
}
while !cond.load(Ordering::Acquire) {
thread::park();
}
}