Несколько потоков в Rust
Несколько фоновых линий можно поднять подряд, а затем ждать их по одной ручке. Порядок ожидания не обязан совпадать с порядком запуска, но каждую ручку обрабатывают отдельно.
Создадим две линии с разными числами и выведем оба результата после ожидания:
use std::thread;
fn main() {
let first = thread::spawn(|| 10);
let second = thread::spawn(|| 20);
match first.join() {
Ok(a) => println!("{}", a),
Err(_) => println!("failed"),
}
match second.join() {
Ok(b) => println!("{}", b),
Err(_) => println!("failed"),
}
}
На экране две строки: 10 и 20.
Обе линии могли работать одновременно,
пока основная дошла до ожидания.
Три короткие линии с суммой и произведением удобно собрать в отдельные ручки, а потом пройти их циклом:
use std::thread;
fn main() {
let handles = [
thread::spawn(|| 1 + 1),
thread::spawn(|| 2 * 3),
thread::spawn(|| 9 - 4),
];
for handle in handles {
match handle.join() {
Ok(v) => println!("{}", v),
Err(_) => println!("failed"),
}
}
}
Дано число:
let num = 5;
Поднимите три фоновые линии: первая возвращает литерал, вторая удваивает его, третья прибавляет единицу. Дождитесь все ручки и выведите три числа.
Скажите, можно ли сначала дождаться второй ручки, а потом первой, если обе уже запущены.
Дано число:
let num = 2;
Запустите две линии, каждая возвращает литерал, умноженный на разные множители. Сохраните ручки в массив из двух элементов и обработайте их в цикле.