Rust · Intermediário · Inglês · Técnico
Send
Trait marcador que indica que um valor pode ser movido para outra thread com segurança. É automático para a maioria dos tipos, mas Rc e ponteiros brutos não o têm.
Onde usar
Aparece como bound em thread::spawn e tokio::spawn e no erro 'cannot be sent between threads safely'. Se um campo não é Send, a struct inteira também não é.
Em código
use std::sync::Arc;
let a = Arc::new(5);
std::thread::spawn(move || {
println!("{a}"); // ok: Arc é Send
});
// com Rc, o spawn não compilariaExemplos
Rc is not Send, use Arc instead.
Rc não é Send, use Arc.
The future isn't Send because of that guard.
A future não é Send por causa desse guard.
Cuidado
Send não significa seguro para acesso compartilhado; isso é Sync. Um tipo pode ser Send sem ser Sync, como o Cell.
Antônimos
Sync