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.