1 个不稳定版本
0.0.1 | 2019年4月20日 |
---|
#29 在 #dropped
16KB
269 行
苗圃 - Rust 并发原语。
Nathaniel J. Smith 结构化并发模型的实现: 结构化并发笔记。
描述
并发的构建块称为 Nursery
。它们可以采用或安排并发操作。在 Nursery
被丢弃之前,它将在所有挂起的并发操作上阻塞。一个 Nursery
本身也是一个并发操作,因此它可以被另一个 Nursery
采用,形成一个层次结构。
示例
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);