添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Function std::thread::scope

pub fn scope<'env, F, T>(f: F) -> T where    F: for<'scope> FnOnce(&'scope Scope<'scope, 'env>) -> T, 

创建一个范围,用于催生范围内的线程。

传递给 scope 的函数将提供一个 Scope 对象,通过它可以 产生 作用域线程。

与非作用域线程不同,作用域线程可以借用非 'static 数据,因为作用域保证所有线程都将在作用域的末尾加入。

在这个范围内产生的所有线程,如果没有被手动加入,将在这个函数返回之前被自动加入。

Panics

如果任何一个自动加入的线程惊慌失措,这个函数将惊慌失措。

如果您想处理衍生线程的恐慌,请在范围结束之前 join

Example

use std::thread;
let mut a = vec![1, 2, 3];
let mut x = 0;
thread::scope(|s| {
    s.spawn(|| {
        println!("hello from the first scoped thread");
        // 我们可以在这里借用 `a`。
        dbg!(&a);
    s.spawn(|| {
        println!("hello from the second scoped thread");
        // 我们甚至可以在这里可变地借用 `x`,
        // 因为没有其他线程在使用它。
        x += a[0] + a[2];
    println!("hello from the main thread");
// 在作用域之后,我们可以再次修改和访问我们的变量:
a.push(4);
assert_eq!(x, a.len());

Lifetimes

作用域线程涉及两个生命周期: 'scope 'env

'scope 生命周期表示范围本身的生命周期。即:可能产生新作用域线程的时间,以及它们可能仍在运行的时间。一旦此生命周期结束,所有作用域线程都将加入。这个生命周期在 scope 函数内开始,在 f scope 的参数)开始之前。它在 f 返回并且所有作用域线程都已加入但在 scope 返回之前结束。

'env 生命周期表示作用域线程借用的任何内容的生命周期。 scope 的调用更持久,因此不能小于 'scope . 它可以像对 scope 的调用一样小,这意味着任何超出此调用的时间,例如在作用域之前定义的局部变量,都可以被作用域线程借用。

'env: 'scope 绑定是 Scope 类型定义的一部分。