6. Rust 跨线程传递/共享
上一条: Mutex/RwLock 下一条:内部共享
对象在跨线程间使用
- 一个对象可以从线程A传递给线程B,此时需要对象类型实现 `Send trait`
- 一个对象的借用可以从线程A传递给线程B,此时需要对象类型实现 `Sync Trait`
- 如果 `T` 实现了 `Sync`,则 `& T` 自动实现了`Send` => `& T` 可以从线程A传递给线程B
根据上面的规则【1】,实际上一个对象从线程A传递给线程B有如下情况
- 原生指针即不实现 `Send`, 也不实现 `Sync`
- Copy,既然都Copy了,每个线程持有一份独立拷贝
- Move,既然Move了,每次只有一个线程有所有权,
- 唯一所有权对象的Borrow
- 不可变借用,多个线程间不可变借用,同时读取,遵循可同时多处不可变借用规则
- 可变借用,一次只能有一个线程持有可变借用,唯一写
- 多所有权对象的Borrow
- `Rc` 即不实现 `Send` 也不实现 `Sync`,这是因为 `Rc` 的引用计数并没有使用Lock或者 Aotomic ,因此不能在多个线程间同时修改引用计数,不能在线程间 Send,更不能 Sync 了
- `Arc` 实现了线程安全的引用计数,实现了`Send`,如果内部包含的类型可以`Sync`,则`Arc<T>` 也能 `Sync`
- `UnsafeCell` 没有实现`Sync`,因此 `Cell` 和 `RefCell` 也没有实现 `Sync`,但是可以`Send`
相关推荐
系统编程Rust并发编程深度解析:线程、消息传递、共享状态及异步编程实战指南
内容概要:本文深入探讨了Rust在系统编程中的并发编程实战,涵盖线程、消息传递、共享状态、异步编程等核心主题。文章首先介绍了Rust并发编程的基础,包括线程创建与管理、线程闭包的移动语义等。接着详细讲解了消息传递并发机制,如通道(Channels)的使用,强调了Rust“通过通信来共享内存”的哲学。然后讨论了共享状态并发工具,如互斥锁(Mutex)、读写锁(RwLock)和原子类型(Atomic Types)。高级并发原语部分介绍了条件变量(Condvar)、信号量(Semaphore)和屏障(Barrier)。异步编程章节重点介绍了async/await语法和Tokio运行时的使用。最后,文章总结了Rust并发编程的核心优势,包括内存安全、零成本抽象、灵活范式和丰富生态,并给出了学习路径建议。 适合人群:具备一定编程基础,特别是对系统编程和并发编程感兴趣的开发者,尤其是那些希望深入了解Rust语言特性和实践技巧的人群。 使用场景及目标:①理解Rust如何通过所有权、借用和生命周期系统在编译期杜绝数据竞争;②掌握线程管理、消息传递、共享状态等基本并发编程技能;③学会使用异步编程模型(如async/await)提高程序性能;④了解并实践常见的并发设计模式,如生产者-消费者模式和Actor模型。 其他说明:本文不仅提供了理论讲解,还结合了大量实际代码示例,帮助读者更好地理解和应用Rust并发编程。建议读者在学习过程中多动手实践,结合调试工具进行深入探索,逐步掌握Rust并发编程的精髓。
卵石:用Rust编写的微内核和用户空间,具有一流的消息传递能力
卵石:用Rust编写的微内核和用户空间,具有一流的消息传递能力
ffi-toolkit:一个用于Rust FFI共享模式的板条箱
ffi工具包 一个用于Rust FFI共享模式的板条箱
RUST中文教程
RUST中文教程中英文对照版本,内容完整,方便学习使用
RUST编程中文手册
RUST编程中文手册 随时可以翻看 真的很不错 不可错过 积分只是表示一下



