395  字
  2  分钟 
  Rust Send / Sync 
 Send
Send 表示一个类型的值可以安全地在线程之间传递。当一个类型实现了 Send trait 时,这意味着该类型的所有权可以安全地从一个线程转移到另一个线程。标准库中的大多数类型都实现了 Send,包括原生类型(如 i32、f64 等)和标准库提供的容器(如 Vec<T>、Option<T> 等),但一些类型(如 Rc<T>)由于其内部的非线程安全特性并没有实现 Send。
Sync
Sync 也是一个标记 trait,表示一个类型的引用可以安全地在多个线程之间共享。如果一个类型 T 是 Sync 的,那么 &T 是 Send 的,即类型的共享引用可以在线程之间传递。换句话说,如果一个类型是 Sync 的,多个线程可以安全地引用它。这通常用于不可变的数据或通过同步原语(如互斥锁)保护的可变数据。标准库中的大多数类型也实现了 Sync。
示例
use std::sync::{Arc, Mutex};use std::thread;
fn main() {    // 是 Send 和 Sync    let x = 5;
    // 创建一个原子引用计数的智能指针    let data = Arc::new(Mutex::new(x));
    let mut handles = vec![];
    for _ in 0..10 {        let data = Arc::clone(&data);        let handle = thread::spawn(move || {            let mut num = data.lock().unwrap();            *num += 1;        });        handles.push(handle);    }
    for handle in handles {        handle.join().unwrap();    }
    println!("Result: {}", *data.lock().unwrap());}在这个例子中:
- i32类型默认实现了- Send和- Sync。
- Mutex<T>也是- Send和- Sync的,只要- T是- Send和- Sync的。
- Arc<T>是一个原子引用计数智能指针,它实现了- Send和- Sync,只要- T是- Send和- Sync。
 Rust Send / Sync 
  https://blog.lpkt.cn/posts/rust-send-sync/     
  