Hilos con ámbito
Los hilos normales no pueden tomar nada prestado de su entorno:
use std::thread; fn foo() { let s = String::from("Hola"); thread::spawn(|| { println!("Longitud: {}", s.len()); }); } fn main() { foo(); }
Sin embargo, puedes usar un hilo con ámbito para lo siguiente:
use std::thread; fn main() { let s = String::from("Hola"); thread::scope(|scope| { scope.spawn(|| { println!("Longitud: {}", s.len()); }); }); }
This slide should take about 13 minutes.
- La razón es que, cuando se completa la función
thread::scope
, se asegura que todos los hilos están unidos, por lo que pueden devolver datos prestados. - Se aplican las reglas normales de préstamo de Rust: un hilo puede tomar datos prestados de manera mutable o cualquier número de hilos puede tomar datos prestados de manera inmutable.