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.