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());
        });
    });
}
  • 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.