[][src]Crate spinning_top

Provides a simple spinlock based on the abstractions provided by the lock_api crate.

Usage Example

use spinning_top::Spinlock;

fn main() {
    let data = String::from("Hello");
    // Wrap some data in a spinlock
    let spinlock = Spinlock::new(data);

    // Lock the spinlock to get a mutex guard for the data
    let mut locked_data = spinlock.lock();
    // The guard implements the `Deref` trait, so we can use it like a `&String`
    assert_eq!(locked_data.as_str(), "Hello");
    // It also implements `DerefMut` so mutation is possible too. This is safe
    // because the spinlock ensures mutual exclusion
    locked_data.make_ascii_uppercase();
    assert_eq!(locked_data.as_str(), "HELLO");
     
    // the guard automatically frees the lock at the end of the scope
}

Re-exports

pub use lock_api;

Structs

RawSpinlock

Provides mutual exclusion based on spinning on an AtomicBool.

Type Definitions

Spinlock

A mutual exclusion (Mutex) type based on busy-waiting.

SpinlockGuard

A RAII guard that frees the spinlock when it goes out of scope.