EnumとSend
RustのenumがSend,Syncを実装するには?
enumは代数的データ型でいうsum type(和型…?)で、そのvariantのいずれにもなりうる。enumがSend
であるためには、そのvariant(のstructやtupleの要素)がすべてSend
でなければならない。
以下の例ではRc
を送るとエラーになることを示す。Rc
がSend, Sync
でない理由はRcはSend, Syncではないを参照。
use std::sync::mpsc::*;
use std::rc::Rc; // Rc: !Send, !Sync
#[derive(Debug)]
enum Animal {
Dog,
Cat {
color: Rc<()>,
},
Human
}
fn main() {
let (tx, rx) = channel();
std::thread::spawn(move || {
tx.send(Animal::Cat{color: Rc::new(())}).unwrap();
// This also errors
//tx.send(Animal::Dog).unwrap();
});
let val = rx.recv();
println!("Received {:?}", val);
}
Backlinks
There are no notes linking to this note.