use std::thread::yield_now;
pub trait BackoffPolicy: Sized {
fn new() -> Self;
fn spin(&self);
fn snooze(&self);
}
#[derive(Debug)]
pub struct Crossbeam(crossbeam_utils::Backoff);
impl Default for Crossbeam {
fn default() -> Self {
Self::new()
}
}
impl BackoffPolicy for Crossbeam {
#[inline]
fn new() -> Self {
Self(crossbeam_utils::Backoff::new())
}
#[inline]
fn spin(&self) {
self.0.spin();
}
#[inline]
fn snooze(&self) {
self.0.snooze();
}
}
#[derive(Clone, Copy, Debug, Default)]
pub struct Yield;
impl BackoffPolicy for Yield {
#[inline]
fn new() -> Self {
Self
}
#[inline]
fn spin(&self) {}
#[inline]
fn snooze(&self) {
yield_now();
}
}