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