6. Rust 跨线程传递/共享

幻灰龙 幻灰龙 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

上一条: Mutex/RwLock 下一条:内部共享

对象在跨线程间使用

  1. 一个对象可以从线程A传递给线程B,此时需要对象类型实现  `Send trait`
  2. 一个对象的借用可以从线程A传递给线程B,此时需要对象类型实现  `Sync Trait`
  3. 如果 `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共享模式的板条箱

Her101

RUST中文教程

RUST中文教程中英文对照版本,内容完整,方便学习使用

uyghzh

RUST编程中文手册

RUST编程中文手册 随时可以翻看 真的很不错 不可错过 积分只是表示一下

rlks777
评论 1
收藏 已收藏
分享
返回顶部
幻灰龙
10x Rust 1,726 成员 130 内容