Многопоточность

Многопоточное программирование, когда разные части программы выполняются независимо,

Note

Используя владение и проверку типов, многие ошибки многопоточности являются ошибками времени компиляции в Rust, а не ошибками времени выполнения.

Rust использует модель реализации потоков 1:1, при которой одному потоку операционной системы соответствует ровно один "языковой" поток.

Создание нового потока с помощью spawn

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

fn main() {
    thread::spawn(|| { //создание потока
        for i in 1..10 {
            println!("hi number {i} from the spawned thread!");
            thread::sleep(Duration::from_millis(1));
        }
    });

    for i in 1..5 {
        println!("hi number {i} from the main thread!");
        thread::sleep(Duration::from_millis(1));
    }
}
  • thread::spawn(|| { — создание потока
  • thread::sleep( — задержка потока
  • join — дождаться завершения всех потоков handle.join().unwrap();

join отстанавливает выполнение потока до завершения потока с указателем

handle.join().unwrap();

Использование move-замыканий в потоках

use std::thread;

fn main() {
    let v = vec![1, 2, 3];

    let handle = thread::spawn(move || {
        println!("Here's a vector: {v:?}");
    });

    handle.join().unwrap();
}

нужно передать во владение переменную в поток