教程 rust tutorial

并发安全与内存管理

Rust 在并发环境中保证内存安全,利用类型系统防止数据竞争和资源冲突。

数据竞争与内存安全

数据竞争是两个或多个线程同时访问同一内存位置且至少一个为写操作。Rust 的所有权和借用规则在编译期避免这类问题。

线程安全的类型

  • Send trait:表示类型可以安全地在线程间传递。
  • Sync trait:表示类型的引用可以安全地在多线程间共享。

使用 Mutex 和 Arc 共享状态

通过互斥锁 Mutex 保护共享数据,原子引用计数 Arc 共享所有权:

rust
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());
}

内存管理

Rust 通过所有权和生命周期管理内存,无需垃圾回收,确保高性能和安全。

代码演示

Rust Playground
打开运行
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());

}