Threads

Threads em Rust funcionam de maneira semelhante Ă s threads em outras linguagens:

use std::thread;
use std::time::Duration;

fn main() {
    thread::spawn(|| {
        for i in 1..10 {
            println!("Contagem na _thread_: {i}!");
            thread::sleep(Duration::from_millis(5));
        }
    });

    for i in 1..5 {
        println!("_Thread_ principal: {i}");
        thread::sleep(Duration::from_millis(5));
    }
}
  • Threads sĂŁo todas “daemon threads”, a thread principal nĂŁo espera por elas.
  • “Panics” em threads sĂŁo independentes uns dos outros.
    • “Panics” podem carregar um payload (carga Ăștil), que pode ser descompactado com downcast_ref.

Pontos chave:

  • Observe que a thread Ă© interrompida antes de atingir 10 — a thread principal nĂŁo estĂĄ esperando.

  • Use let handle = thread::spawn(...) e depois handle.join() para esperar que a thread termine.

  • Dispare um panic na thread, observe como isso nĂŁo afeta main.

  • Use o valor de retorno Result de handle.join() para obter acesso ao payload do panic. Este Ă© um bom momento para falar sobre Any.