This Rust library implements a simple spinlock.
Just run cargo build
.
When calling lock
on a Spinlock
you will get a reference to the data. When this reference is dropped, the lock will be unlocked.
```rust extern crate spinlock; use spinlock::Spinlock;
fn main() { let spinlock = Spinlock::new(0u);
// Modify the data
{
let mut data = spinlock.lock();
*data = 2;
}
// Read the data
let answer =
{
let data = spinlock.lock();
*data
};
println!("Answer is {}", answer);
} ```
To share the lock, an Arc<Spinlock<T>>
may be used.
The behaviour of this lock is similar to that of std::sync::Mutex
. It differs on the following:
- The lock will not be poisoned in case of failure;
- The lock can also be used from a plain thread (such as a bare pthread
).