Rust 并发编程中的 Channel、Mutex 与 Arc
Rust 并发编程中的 Channel、Mutex 与 Arc
Rust 的并发模型很有辨识度:它不只是提供线程 API,还通过类型系统限制危险的数据共享方式。常见并发工具主要有 Channel、Mutex 和 Arc。
一、线程基础
1 | use std::thread; |
join 会等待线程结束。
二、Channel 传递消息
Channel 适合“一个线程把结果发给另一个线程”:
1 | use std::sync::mpsc; |
这种方式的好处是少共享状态,多传递消息。
三、Mutex 保护共享数据
当确实需要共享可变状态时,可以用 Mutex:
1 | use std::sync::{Arc, Mutex}; |
Mutex 负责互斥,Arc 负责多线程引用计数。
四、选择建议
优先考虑 Channel,因为它更容易控制数据流。只有当多个任务确实需要读写同一份状态时,再考虑 Arc<Mutex<T>>。
Rust 不是让并发变得完全简单,而是让很多危险写法无法通过编译。你需要多想一步,但调试时会少掉很多隐蔽问题。