[−][src]Crate slock
A Slock
, or Smart Lock, is a smart wrapper around an atomically reference counted read/write lock.
All accesses and modifications are contained, ensuring that threads will never deadlock on a Slock operation.
use slock::*; async { // Create a new lock with an initial value let lock = Slock::new(5i32); // Change the lock's value lock.set(|v| v + 1).await; // Get the lock's value let value = lock.get().await; println!("{}", value); // 6 // Use in multiple threads futures::join!( do_something_in_a_thread(lock.split()), do_something_else_in_a_thread(lock.split()), do_another_thing_in_a_thread(lock.split()), ); };
Things not to do
Don't access a Slock from within another
Bad:
let lock_1 = Slock::new(0i32); let lock_2 = Slock::new(1i32); // Add the value of lock_2 to lock_1 lock_1.set(|v| v + block_on(lock_2.get())).await;
Good:
let lock_1 = Slock::new(0i32); let lock_2 = Slock::new(1i32); // Add the value of lock_2 to lock_1 let v_2 = lock_2.get().await; lock_1.set(|v| v + v_2).await;
Modules
blocking |
Structs
Slock | |
SlockData | |
TimeoutError | An error returned when a future times out. |
Functions
timeout | Awaits a future or times out after a duration of time. |
Type Definitions
SlockMap | HashMaps |