You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A simple spinlock crate based on the abstractions provided by lock_api.
Example
First, import the crate as a dependency in your Cargo.toml. Then you can use it in the following way:
use spinning_top::Spinlock;fnmain(){// Wrap some data in a spinlocklet 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 spinlocklet data = spinlock.into_inner();assert_eq!(data.as_str(),"HELLO");}fnmake_uppercase(spinlock:&Spinlock<String>){// Lock the spinlock to get a mutable reference to the dataletmut 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}
Spinlock::new is a const function. This makes the Spinlock type
usable in statics:
use spinning_top::Spinlock;staticDATA:Spinlock<u32> = Spinlock::new(0);fnmain(){letmut data = DATA.lock();*data += 1;assert_eq!(*data,1);}
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
About
A simple spinlock crate based on the abstractions provided by the `lock_api` crate.