Rust的并发哲学

Rust的并发编程遵循核心原则:fearless concurrency(无畏并发)。编译器在编译期就排除了数据竞争。

使用std::thread创建线程

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

fn main() {
    let handle = thread::spawn(|| {
        for i in 1..=5 {
            println!("子线程: 第{}次", i);
            thread::sleep(Duration::from_millis(100));
        }
    });
    handle.join().unwrap();
}

Channel:消息传递

Rust推荐"不要通过共享内存来通信,而要通过通信来共享内存"。

Mutex:互斥锁

use std::sync::{Arc, Mutex};
use std::thread;

fn main() {
    let counter = Arc::new(Mutex::new(0));
    let mut handles = vec![];
    for _ in 0..10 {
        let counter = Arc::clone(&counter);
        let handle = thread::spawn(move || {
            let mut num = counter.lock().unwrap();
            *num += 1;
        });
        handles.push(handle);
    }
    for handle in handles { handle.join().unwrap(); }
    println!("结果: {}", *counter.lock().unwrap());
}

Channel vs Mutex选择指南

场景推荐方式
生产者-消费者模式Channel
多线程共享可变状态Mutex
读写分离,读多写少RwLock