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());
        });
    });
}
This slide should take about 13 minutes.
  • 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.