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 |
0 条评论 欢迎参与讨论