pub struct Dekker<T> { /* private fields */ }
Expand description
Provides mutually exclusive access to a shared object using Dekker’s algorithm.
Implementations§
Source§impl<T> Dekker<T>
impl<T> Dekker<T>
Sourcepub fn new(shared: T) -> (Process<T>, Process<T>)
pub fn new(shared: T) -> (Process<T>, Process<T>)
Allocates a new shared object and returns two processes to access it.
Examples found in repository?
examples/count.rs (line 6)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
fn main() {
// Create two process handles.
let (mut p1, mut p2) = Dekker::new(0);
// Create a new thread and move one handle.
let other = thread::spawn(move || {
// Increment by one five times.
for _ in 0..5 {
println!("Incrementing in secondary thread.");
*p2.lock() += 1;
}
});
// Increment by one another five times.
for _ in 0..5 {
println!("Incrementing in main thread.");
*p1.lock() += 1;
}
// Join the threads.
other.join().unwrap();
println!("The counter is now at {}.", *p1.lock());
}
Auto Trait Implementations§
impl<T> Freeze for Dekker<T>where
T: Freeze,
impl<T> RefUnwindSafe for Dekker<T>where
T: RefUnwindSafe,
impl<T> Send for Dekker<T>where
T: Send,
impl<T> Sync for Dekker<T>where
T: Sync,
impl<T> Unpin for Dekker<T>where
T: Unpin,
impl<T> UnwindSafe for Dekker<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more