Threads com Escopo
Threads normais não podem emprestar de seu ambiente:
use std::thread;
fn foo() {
let s = String::from("Olá");
thread::spawn(|| {
println!("Comprimento: {}", s.len());
});
}
fn main() {
foo();
}
No entanto, você pode usar uma thread com escopo para isso:
use std::thread;
fn main() {
let s = String::from("Olá");
thread::scope(|scope| {
scope.spawn(|| {
println!("Comprimento: {}", s.len());
});
});
}
This slide should take about 13 minutes.
- A razão para isso é que, quando a função
thread::scopefor concluída, todas as threads serão unidas, para que possam retornar dados emprestados. - As regras normais de empréstimo do Rust se aplicam: você pode emprestar mutavelmente por uma thread, ou imutavelmente por qualquer número de threads.