#async #primitive #forms #operations #block #dropped

nursery

Nathaniel J. Smith 的并发原语在 Rust 中的实现。

1 个不稳定版本

0.0.1 2019年4月20日

#29#dropped

Apache-2.0 协议

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);

无运行时依赖