限定範圍執行緒

一般執行緒無法借用環境的資源:

use std::thread;

fn foo() {
    let s = String::from("Hello");
    thread::spawn(|| {
        println!("Length: {}", s.len());
    });
}

fn main() {
    foo();
}

但是,你可以使用限定範圍執行緒執行這項功能:

use std::thread;

fn main() {
    let s = String::from("Hello");

    thread::scope(|scope| {
        scope.spawn(|| {
            println!("Length: {}", s.len());
        });
    });
}
  • 原因在於 thread::scope 函式完成時,能保證所有執行緒都已加入,因此能夠傳回借用的資料。
  • 適用 Rust 一般借用規則:可以由一個執行緒以可變方式借用,或者由任意數量的執行緒以不可變方式借用。