Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpThSv 129 of 288 menu
◀ ▶

Несколько потоков в 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;

Запустите две линии, каждая возвращает литерал, умноженный на разные множители. Сохраните ручки в массив из двух элементов и обработайте их в цикле.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить