限定範圍執行緒
一般執行緒無法借用環境的資源:
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 一般借用規則:可以由一個執行緒以可變方式借用,或者由任意數量的執行緒以不可變方式借用。