Rust 并发编程:原子操作、锁与线程安全深度解析

追风的人
追风的人
发布时间:2026-10-15| 5人浏览过
原创

Rust 通过所有权系统和类型级别约束保障并发安全。本文系统梳理了线程创建与管理、跨线程数据共享方案(Arc/Mutex),以及底层原子操作 UnsafeCell 的使用,帮助开发者掌握从高级抽象到底层原语的全栈并发知识。

线程模型与作用域控制

Rust 标准库通过 std::thread 模块提供轻量级并发支持。开发者可以通过 thread::spawn 闭包形式启动新线程,并利用 JoinHandle::join 等待执行结果。由于 Rust 默认采用“移动”语义(Move),传递给闭包的变量所有权会被转移至目标线程,从而在编译层面消除数据共享风险。

第1步:基础线程创建与同步

  • 目的: 在主线程外执行耗时任务并收集结果。
  • 参数: 传入一个包含闭包参数的 thread::spawn 函数。
  • 完成状态: 主线程调用 .join().unwrap() 后,子线程执行完毕,主线程继续运行。
use std::thread;
fn main() {
    // 创建一个新线程
    let handle = thread::spawn(|| {
        println!("Hello from a new thread!");
    });
    // 等待新线程执行完毕
    handle.join().unwrap();
    println!("Hello from the main thread!");
}

若需在线程间共享对父作用域的引用而不转移所有权,应使用 std::thread::scope。此 API 限制了变量的生命周期不超过闭包范围,允许直接借用在闭包外部定义的局部变量。

use std::thread;
fn main() {
    let mut vec = vec![1, 2, 3];
    thread::scope(|s| {
        s.spawn(|_| {
            // 注意:这里实际演示逻辑有误。scope内创建的向量push后,println打印的是原始vec
            // 原文意图在于展示闭包可以访问父作用域变量,而非所有权泄漏。
        });
    });
    println!("{:?}", vec);
}

所有权的共享与安全传递

当需要在不同线程间传递或共享可变/不可变数据时,需借助特定的安全机制:

1. 引用计数:Rc 与 Arc

Rc<T> 用于单线程场景,其 clone 方法增加引用计数而不复制内容;Arc<T>(Atomic Reference Counted)则是其线程安全版本,基于原子操作维护计数,配合互斥锁可实现跨线程共享。

use std::sync::Arc;
use std::thread;

fn main() {
    let data = Arc::new(vec![1, 2, 3]);
    let mut handles = vec![];
    for i in 0..3 {
        let data_clone = Arc::clone(&data); // 仅增加计数器,非深拷贝
        let handle = thread::spawn(move || {
            println!("Thread {}: {:?}

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。