Rust 并发编程实战课
晁岳攀(鸟窝)
前微博技术专家,知名微服务框架 rpcx 作者
451 人已学习
新⼈⾸单¥98
Rust 并发编程实战课
15
15
1.0x
00:00/00:00
登录|注册

08|博采众长,触类旁通:有趣的线程扩展

你好,我是鸟窝。
在前面几节课程中我们学习了 Rust 线程相关的知识,如果你掌握好前面的线程的知识,理解了 Rust 中线程这个最基本的并发单元, 就可以轻松实现基本的并发程序了。在这节课中,我给你介绍几个关于线程的有趣的知识点。
首先我们先来了解 Rust 并发编程中两个重要但平时却不怎么接触的 trait:SyncSend

Sync、Send 和 send_wrapper

在 Rust 中,SyncSend 是两个非常重要的 trait,它们用于标记类型是否可以在并发环境下安全地使用。理解这两个 trait 对于编写正确的并发程序至关重要。
SendSync 是 Rust 并发编程的基础。
Send 允许类型的所有权在线程之间安全传递。
Sync 允许类型通过共享引用在多个线程之间安全访问。

Send trait

Send trait 标记了类型的所有权可以在线程之间安全传递。换句话说,如果一个类型 T 实现了 Send,那么将 T 的值从一个线程移动(move)到另一个线程是安全的。
含义:Send 意味着类型的所有权可以安全地在线程之间转移。
例子:大部分基本类型(如 i32f64bool 等)、结构体、枚举、以及包含 Send 类型的容器(如 Vec<T>,如果 TSend 的话)都自动实现了 Send
反例:Rc<T>(引用计数)没有实现 Send,因为它的引用计数是共享的,在多线程环境下直接使用会导致数据竞争。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. `Send` 和 `Sync` 是 Rust 并发编程中的重要 trait,用于标记类型是否可以在并发环境下安全地使用。 2. `Send` trait 允许类型的所有权在线程之间安全传递,而 `Sync` trait 允许类型通过共享引用在多个线程之间安全访问。 3. 常见的并发类型如 `Arc<T>`、`Mutex<T>`、`RwLock<T>`、通道和原子类型都与 `Send` 和 `Sync` 相关。 4. 避免手动实现 `Send` 和 `Sync`,除非绝对必要,因为手动实现需要保证类型的并发安全性。 5. `go-spawn` 提供了四个宏,包括 `go`、`go_ref`、`join` 和 `join_all`,用于创建线程和等待线程完成。 6. 通过 `go-spawn` 提供的宏,可以以最少的代码实现并发单元的启动和等待,使得 Rust 中的并发编程更加便捷和直观。 7. `defer` 语句在 Go 语言中用于注册延迟执行的函数调用,在 Rust 中可以使用 `scopeguard` 库实现类似功能。 8. `scopeguard` 提供了方便的 RAII scope guard,允许在作用域结束时执行给定的闭包,即使在作用域中的代码发生 panic。 9. `join` 方法用于等待线程执行完成,可以通过 `std::thread::JoinHandle` 上的 `join` 方法实现。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 并发编程实战课》
新⼈⾸单¥98
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)