Tråde med virkefelt
Normale tråde kan ikke låne fra deres omgivelser:
use std::thread; fn foo() { let s = String::from("Hello"); thread::spawn(|| { println!("Længde: {}", s.len()); }); } fn main() { foo(); }
Du kan dog bruge en tråd med virkefelt (eng: scoped thread) for at opnå dette:
use std::thread; fn main() { let s = String::from("Hello"); thread::scope(|scope| { scope.spawn(|| { println!("Længde: {}", s.len()); }); }); }
- Grunden er, at
thread::scope
-funktionen garanterer at alle trådene er blevet forenet med hovedtråden når kaldet afsluttet. De vil således returnere det lånte data. - De normale låneregler for Rust gælder: du kan enten lade én tråd låne data for at ændre på det, eller du kan lade flere tråde låne data uden at ændre på det.