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::scope
for 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.