Rust 並列処理

Rustには1つのプロセスで複数のスレッドを実行するメカニズムも備わっている。そのため、同時に複数のことを行うことができる。

use std::thread;
use std::time::Duration;

fn printch(c: char){
	println!("スレッド{}スタート", c);
	for _i in 1..10 {
		print!("{}", c);
		thread::sleep(Duraion::from_millis(100));
	}
	println!("スレッド{}終了", c);
}

fn main(){
	let th1 = thread::spawn(|| printch('A'));
	let th2 = thread::spawn(|| printch('B'));
	let th3 = thread::spawn(|| printch('C'));

	th1.join().unwrap();
	th2.join().unwrap();
	th3.join().unwrap();
	println!("プログラム終了");
}

### クロージャー化
スレッドを起動するためには無名関数は次のように呼び出す
thread::spawn(|| {
});

use std::thread;
use std::time::Duration;

fn main(){
	let th1 = thread::spawn(|| {
		println!("スレッド1スタート");
		for _i in 1..10 {
			print!("A");
			thread::sleep(Duration::from_millis(100));
		}
		println!("スレッド1終了");
	});
	let th2 = thread::spawn(|| {
		print!("スレッド2スタート");
		for _i in 1..10 {
			print!("B");
			thread::sleep(Duration::from_millis(100));
		}
		println!("スレッド2終了");

	});

	th1.join().unwrap();
	th2.join().unwrap();
	println!("プログラム終了");
}
use std::thread;
use std::time::Duration;

fn main(){
	let func = |c| {
		for _i in 1..10 {
			print!("{}", c);
			thread::sleep(Duration::fromm_millis(100));
		}
	}

	let th1 = thread::spawn(move || func("A"));
	let th2 = thread::spawn(move || func("B"));

	th1.join().unwrap();
	th2.join().unwrap();
	println!("プログラム終了");
}