問題一覧に戻る
上級並行性
問題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();
}