問題一覧に戻る
上級並行性
問題92: Send と Sync
SendとSyncはスレッド安全性のマーカートレイトです。Send型はスレッド間で移動可能、Sync型はスレッド間で共有可能です。ほとんどの型はこれらを自動実装します。RcはSendでもSyncでもなく、Arcは両方です。これらのトレイトの理解は並行コードの記述に重要で、コンパイル時にスレッド安全性を保証します。
use std::thread;
// Send境界を要求
fn is_send<T: >(_: T) {}
// Sync境界を要求
fn is_sync<T: >(_: T) {}
fn main() {
let num = 42;
is_send(num);
is_sync(&num);
// スレッド間での移動
let v = vec![1, 2, 3];
thread::spawn( || {
println!("{:?}", v);
}).join().unwrap();
}