[−][src]Crate nursery
An implementation of Nathaniel J. Smiths Structured Concurrency model: Notes on Structured Concurrency.
Description
The building block of concurrency is called a Nursery
. They can adopt or schedule
concurrent operations. Before a Nursery
is dropped it will block on all of it's
pending concurrent operations. A Nursery
is itself a concurrent operation so
it can be adopted by another Nursery
to form a hierarchy.
Example
extern crate nursery; use nursery::thread::{Handle, Pending}; use nursery::{Nursery, Waitable}; use std::sync::Arc; use std::sync::Mutex; pub struct Counter { count: i32, } impl Counter { pub fn incr(&mut self) { self.count += 1; } } let counter = Arc::new(Mutex::new(Counter { count: 0 })); { let h_counter = counter.clone(); let h1 = Pending::new(move || { let mut c = h_counter.lock().unwrap(); c.incr(); }); let h_counter = counter.clone(); let h2 = Pending::new(move || { let mut c = h_counter.lock().unwrap(); c.incr(); }); let mut child = Nursery::new(); child.schedule(Box::new(h1)); child.schedule(Box::new(h2)); let mut parent = Nursery::new(); parent.adopt(child.into()); // Before parent is dropped all of the above concurrent operations // will complete. } assert_eq!(counter.lock().unwrap().count, 2);
Re-exports
pub use crate::thread::Handle as ThreadHandle; |
Modules
thread |
Structs
Nursery | An RAII aware concurrency primitive. |
Traits
Schedulable | The trait that as of yet not started concurrent operations must implement. |
Waitable | The trait that handles to a concurrent operation must implement. |