rust笔记10-多线程
在 Rust 中,Sync
和 Send
是用于多线程编程的两个关键 trait,它们帮助确保线程安全和数据同步。
Send
和 Sync
Trait
-
Send
:- 表示类型的所有权可以在线程间安全传递。
- 如果一个类型实现了
Send
,它的实例可以从一个线程移动到另一个线程。 - 大多数类型都实现了
Send
,但像Rc<T>
这样的类型没有实现Send
,因为它的引用计数不是线程安全的。
-
Sync
:- 表示类型的引用可以在线程间安全共享。
- 如果一个类型实现了
Sync
,它的引用可以安全地在多个线程中共享。 - 例如,
Mutex<T>
实现了Sync
,因为它提供了线程安全的内部可变性。
多线程间的数据传送
在 Rust 中,多线程间的数据传送通常通过以下方式实现:
-
通道(Channel):
- Rust 提供了
std::sync::mpsc
模块,用于创建多生产者、单消费者的通道。 - 通道允许一个线程发送数据,另一个线程接收数据。
- 示例:
use std::sync::mpsc; use std::thread; fn main() { let (tx, rx) = mpsc::channel(); thread::spawn(move || { let val = String::from("hello"); tx.send(val).unwrap(); }); let received = rx.recv().unwrap(); println!("Got: {}", received); }
- Rust 提供了
-
共享内存:
- 使用
Arc
(原子引用计数)和Mutex
来共享数据。 Arc
允许多个线程共享所有权,Mutex
确保同一时间只有一个线程可以访问数据。- 示例:
use std::sync::{ Arc, Mutex}; use std::thread; fn main() { let counter
- 使用