// Copyright 2016 Amanieu d'Antras // // Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or // http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or // http://opensource.org/licenses/MIT>, at your option. This file may not be // copied, modified, or distributed except according to those terms.
usecrate::thread_parker; use core::hint::spin_loop;
// Wastes some CPU time for the given number of iterations, // using a hint to indicate to the CPU that we are spinning. #[inline] fn cpu_relax(iterations: u32) { for _ in0..iterations {
spin_loop()
}
}
/// A counter used to perform exponential backoff in spin loops. #[derive(Default)] pubstruct SpinWait {
counter: u32,
}
impl SpinWait { /// Creates a new `SpinWait`. #[inline] pubfn new() -> Self { Self::default()
}
/// Resets a `SpinWait` to its initial state. #[inline] pubfn reset(&mutself) { self.counter = 0;
}
/// Spins until the sleep threshold has been reached. /// /// This function returns whether the sleep threshold has been reached, at /// which point further spinning has diminishing returns and the thread /// should be parked instead. /// /// The spin strategy will initially use a CPU-bound loop but will fall back /// to yielding the CPU to the OS after a few iterations. #[inline] pubfn spin(&mutself) -> bool { ifself.counter >= 10 { returnfalse;
} self.counter += 1; ifself.counter <= 3 {
cpu_relax(1 << self.counter);
} else {
thread_parker::thread_yield();
} true
}
/// Spins without yielding the thread to the OS. /// /// Instead, the backoff is simply capped at a maximum value. This can be /// used to improve throughput in `compare_exchange` loops that have high /// contention. #[inline] pubfn spin_no_yield(&mutself) { self.counter += 1; ifself.counter > 10 { self.counter = 10;
}
cpu_relax(1 << self.counter);
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.20 Sekunden
(vorverarbeitet am 2026-06-22)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.