Expand description
Aquire Mutex
and RwLock
s
safely.
All methods in this crate will try to lock the passed Mutex or RwLock,
if the locking fails, spin_loop_hint
is called and we try again. This practice is called spinlock.
This means that all calls will block the current thread.
Important: When using methods like mutex_lock
, remember that the lock is
droped first when the lambda finishes running.
Example:
use std::{
thread,
sync::{Arc, Mutex},
time::Duration
};
#[derive(Debug)]
struct Person {
age: u8,
name: String
}
fn main() {
let people = Arc::new(Mutex::new(Vec::<Person>::new()));
let mut threads = Vec::<thread::JoinHandle<()>>::new();
// Write in one thread
let people_clone = Arc::clone(&people);
threads.push(thread::spawn(move || {
for i in 0..10 {
padlock::mutex_lock(&people_clone, |lock| {
lock.push(Person {
age: i * 10,
name: format!("Name {}", i)
});
});
thread::sleep(Duration::from_millis(500));
}
}));
// Read from another
let people_clone = Arc::clone(&people);
threads.push(thread::spawn(move || {
for _ in 0..6 {
padlock::mutex_lock(&people_clone, |lock| {
for person in lock {
println!("{:?}", person);
}
});
thread::sleep(Duration::from_secs(1));
}
}));
for t in threads {
t.join();
}
}
Functionsยง
- Get the MutexGuard directly, aquired with a spinlock.
- Get the RwLockReadGuard directly, aquired with a spinlock.
- Get the RwLockWriteGuard directly, aquired with a spinlock.
- Aquire a Mutex lock, passing the lock to the lambda. The lock is released when the lambda finishes. This function returns whatever the lambda returns, allowing you to extract data from a lock without having to worry about releasing the lock.
- Aquire a RwLock read lock, passing the lock to the lambda. The lock is released when the lambda finishes. This function returns whatever the lambda returns, allowing you to extract data from a lock without having to worry about releasing the lock.
- Aquire a RwLock write lock, passing the lock to the lambda. The lock is released when the lambda finishes. This function returns whatever the lambda returns, allowing you to extract data from a lock without having to worry about releasing the lock.