[−][src]Crate spin_sync
spin-sync is a module providing synchronization primitives using spinlock. (Wikipedia Spinlock)
The main features are as follows.
- Declaring public structs
Mutex
,RwLock
,Once
,Barrier
. The interfaces are resembles those ofstd::sync
. - Ensuring safety as much as
std::sync
, including poisoning strategy and marker traits. - Declaring public struct
Mutex8
, which behaves like a set of 8Mutex
instances except for it gives up poison strategy. It is possible to acquire 2 or more than 2 locks of 1Mutex8
instance at once. - Unlike to
std::sync
, the constructors of the public structs are const. For example, it is possible to declare staticMutex<T>
as long as T can be build statically.
Examples
Declare static spin_sync::Mutex<u64>
variable and update from multi threads.
It is impossible in case of std::sync::Mutex
.
extern crate spin_sync; use spin_sync::Mutex; use std::thread; // Declare static mut Mutex<u64> variable. static COUNT: Mutex<u64> = Mutex::new(0); fn main() { let num_thread = 10; let mut handles = Vec::new(); // Create worker threads to inclement COUNT by 1. for _ in 0..10 { let handle = thread::spawn(move || { let mut count = COUNT.lock().unwrap(); *count += 1; }); handles.push(handle); } // Wait for all the workers. for handle in handles { handle.join().unwrap(); } // Make sure the value is incremented by the worker count. let count = COUNT.lock().unwrap(); assert_eq!(num_thread, *count); }
Structs
Barrier | A barrier enables multiple threads to synchronize the beginning of some computation. |
BarrierWaitResult | |
Mutex | A mutual exclusion primitive useful for protecting shared data. |
Mutex8 |
|
Mutex8Guard | An RAII implementation of a "scoped lock(s)" of a |
MutexGuard | An RAII implementation of a "scoped lock" of a mutex. |
Once | A synchronization primitive which can be used to run a one-time global initialization. |
OnceState | State yielded to |
RwLock | A reader-writer lock. |
RwLockReadGuard | An RAII implementation of a "scoped shared read lock" of a RwLock. |
RwLockWriteGuard | An RAII implementation of a "scoped exclusive write lock" of a RwLock. |
Type Definitions
LockResult | Alias to std::sync::LockResult. |
PoisonError | Alias to std::sync::PoisonError |
TryLockError | Alias to std::sync::TryLockError |
TryLockResult | Alias to std::sync::TryLockResult |