69 lines
1.5 KiB
Rust
69 lines
1.5 KiB
Rust
use std::thread;
|
|
use std::time::Duration;
|
|
use std::sync::mpsc;
|
|
|
|
fn basic_thread_usage() {
|
|
let v = vec![1, 2, 3];
|
|
|
|
// Move is a keyword, not a parameter, it gives
|
|
// ownership of closure values to the thread
|
|
let handle = thread::spawn(move|| {
|
|
for i in 1..10 {
|
|
println!("hi number {} from the spawned thread!", i);
|
|
println!("Here's a vector: {:?}", v);
|
|
thread::sleep(Duration::from_millis(1));
|
|
}
|
|
});
|
|
|
|
handle.join().unwrap();
|
|
|
|
for i in 1..5 {
|
|
println!("hi number {} from the main thread!", i);
|
|
thread::sleep(Duration::from_millis(1));
|
|
}
|
|
}
|
|
|
|
fn messages_example() {
|
|
let (tx, rx) = mpsc::channel();
|
|
|
|
let tx1 = mpsc::Sender::clone(&tx);
|
|
thread::spawn(move || {
|
|
let vals = vec![
|
|
String::from("hi"),
|
|
String::from("from"),
|
|
String::from("the"),
|
|
String::from("thread"),
|
|
];
|
|
|
|
for val in vals {
|
|
tx1.send(val).unwrap();
|
|
thread::sleep(Duration::from_secs(1));
|
|
}
|
|
});
|
|
|
|
thread::spawn(move || {
|
|
let vals = vec![
|
|
String::from("more"),
|
|
String::from("messages"),
|
|
String::from("for"),
|
|
String::from("you"),
|
|
];
|
|
|
|
for val in vals {
|
|
tx.send(val).unwrap();
|
|
thread::sleep(Duration::from_secs(1));
|
|
}
|
|
});
|
|
|
|
|
|
for received in rx {
|
|
println!("Got: {}", received);
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
basic_thread_usage();
|
|
|
|
messages_example();
|
|
}
|