use nix::unistd::{fork, getpid, getppid, ForkResult};
use std::thread;
use std::time::Duration;
fn main() {
thread::spawn(|| {
for i in 1..10 {
println!("hi number {} from the spawned thread!", i);
thread::sleep(Duration::from_millis(1));
}
});
for i in 1..5 {
println!("hi number {} from the main thread!", i);
thread::sleep(Duration::from_millis(1));
}
}
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.75s
Running `target/debug/parallel`
hi number 1 from the main thread!
hi number 1 from the spawned thread!
hi number 2 from the main thread!
hi number 2 from the spawned thread!
hi number 3 from the spawned thread!
hi number 3 from the main thread!
hi number 4 from the spawned thread!
hi number 4 from the main thread!
hi number 5 from the spawned thread!
joinを呼び出すことで、実行されたことを保証する
fn main() {
let handle = thread::spawn(|| {
for i in 1..5 {
println!("hi number {} from the spawned thread!", i);
thread::sleep(Duration::from_millis(1));
}
});
for i in 1..5 {
println!("hi number {} from the main thread!", i);
thread::sleep(Duration::from_millis(1));
}
handle.join().unwrap();
}
所有権の移転
fn main() {
let v = vec![1, 2, 3];
let handle = thread::spawn(move|| {
for i in 0..3 {
println!("hi number {} from the spawned thread!", v[i]);
thread::sleep(Duration::from_millis(1));
}
});
for i in 1..3 {
println!("hi number {} from the main thread!", i);
thread::sleep(Duration::from_millis(1));
}
handle.join().unwrap();
}
なんか違うような気がするが…
use nix::unistd::{fork, getpid, getppid, ForkResult};
use std::thread;
use std::time::Duration;
use rayon::current_num_threads;
fn cpu_waster(i: u32) {
let name = gettid::gettid().to_string();
println!("{} doing {} work", name, i);
thread::sleep(Duration::from_millis(5));
}
fn display_threads() {
let str: String = "-".to_string();
println!("{}", str.repeat(10));
println!("Current process PID: {}", getpid());
println!("Thread Count: {}", current_num_threads());
}
fn main() {
let num_threads = 5;
display_threads();
println!("Starting {} CPU waters...", num_threads);
let handle = thread::spawn(move|| {
for i in 0..num_threads {
cpu_waster(i);
}
});
display_threads();
handle.join().unwrap();
}
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.23s
Running `target/debug/parallel`
———-
Current process PID: 582557
Thread Count: 2
Starting 5 CPU waters…
———-
Current process PID: 582557
Thread Count: 2
582600 doing 0 work
582600 doing 1 work
582600 doing 2 work
582600 doing 3 work
582600 doing 4 work