問題一覧に戻る
上級並行性
問題86: スレッドの基礎
Rustは所有権システムを通じて安全な並行性を提供します。thread::spawnは並行に実行される新しいスレッドを作成します。joinメソッドはスレッドの終了を待機し、結果を返します。スレッドは作成スコープより長生きする可能性があるため、moveキーワードで変数をスレッドに移動します。これによりデータ競合なしのメモリ安全性が保証されます。
use std::thread;
use std::time::Duration;
fn main() {
// スレッドを生成
let handle = thread::(|| {
for i in 1..5 {
println!("Thread: {}", i);
thread::sleep(Duration::from_millis(1));
}
});
// メインスレッド
for i in 1..3 {
println!("Main: {}", i);
thread::(Duration::from_millis(1));
}
// スレッドの終了を待機
handle.().unwrap();
// 所有権を移動
let v = vec![1, 2, 3];
let handle2 = thread::spawn( || {
println!("Vector: {:?}", v);
});
handle2.join().();
}