45·并发编程高级

Send 与 Sync trait

Send 与 Sync trait

学习目标

  1. 理解 SendSync 的含义
  2. 掌握自动实现规则
  3. 理解线程安全边界

核心概念

定义

// Send: 类型的所有权可以在线程间转移
// Sync: 类型可以被多个线程安全地共享引用

// 大部分类型自动实现 Send 和 Sync
// 标记类型(marker traits):没有方法,只有语义

哪些类型实现了什么

类型SendSync说明
i32, String基本类型
Vec<T>✅(如果 T: Send)✅(如果 T: Sync)集合
Rc<T>非原子引用计数
Arc<T>原子引用计数
Mutex<T>互斥锁
Cell<T>✅(如果 T: Send)内部可变性

手动实现

use std::rc::Rc;

// Rc 不是 Send,因为引用计数不是原子的
// 所以不能跨线程传递

struct MyType {
    data: Rc<i32>,  // Rc 使 MyType 不是 Send
}

// 如果需要跨线程,用 Arc 替代 Rc

unsafe 实现

// 慎用!只在确保线程安全时才手动实现
struct MySpecialType {
    // ...
}

// unsafe impl Send for MySpecialType {}
// unsafe impl Sync for MySpecialType {}

小结

Trait含义
Send所有权可跨线程转移
Sync引用可跨线程共享
自动实现大部分类型自动满足
Rc不是 Send/Sync
Arc是 Send/Sync

练习编辑器

rust
Loading...