[−][src]Type Definition spinning_top::Spinlock
type Spinlock<T> = Mutex<RawSpinlock, T>;
A mutual exclusion (Mutex) type based on busy-waiting.
Calling lock
(or try_lock
) on this type returns a SpinlockGuard
, which
automatically frees the lock when it goes out of scope.
Example
use spinning_top::Spinlock; fn main() { // Wrap some data in a spinlock let data = String::from("Hello"); let spinlock = Spinlock::new(data); make_uppercase(&spinlock); // only pass a shared reference // We have ownership of the spinlock, so we can extract the data without locking // Note: this consumes the spinlock let data = spinlock.into_inner(); assert_eq!(data.as_str(), "HELLO"); } fn make_uppercase(spinlock: &Spinlock<String>) { // Lock the spinlock to get a mutable reference to the data let mut locked_data = spinlock.lock(); assert_eq!(locked_data.as_str(), "Hello"); locked_data.make_ascii_uppercase(); // the lock is automatically freed at the end of the scope }
Nightly Example
On Rust nightly, the new
function is a const
function, which makes the
Spinlock
type usable in statics:
ⓘThis example is not tested
use spinning_top::Spinlock; static DATA: Spinlock<u32> = Spinlock::new(0); fn main() { let mut data = DATA.lock(); *data += 1; assert_eq!(*data, 1); }