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