Rust 学习笔记:通过 Send 和 Sync trait 实现可扩展并发性

Rust 学习笔记:通过 Send 和 Sync trait 实现可扩展并发性

处理并发的选项并不局限于语言或标准库。

你可以编写自己的并发特性,也可以使用其他人编写的并发特性。

Send 和 Sync trait 是 Rust 标准库下的 marker trait。

Send trait:允许在线程之间转移所有权

Send trait 表明实现 Send 的类型的值的所有权可以在线程之间转移。

几乎每个 Rust 类型都是 Send,但也有一些例外,比如 Rc<T>。

Rc<T> 不能实现 Send,因为如果你克隆了一个 Rc<T> 值,并试图将克隆的所有权转移给另一个线程,两个线程可能同时更新引用计数。出于这个原因,Rc<T> 是为在单线程情况下使用而实现的。

Rust 的类型系统和 trait 约束确保不会将非 Send 类型跨线程发送。

任何完全由 Send 类型组成的类型也会自动标记为 Send。

几乎所有基本类型都实现了 Send,原始指针除外。

Sync trait:允许多线程访问

Sync trait 表明,从多个线程引用实现 Sync 的类型是安全的。

换句话说,如果 &T(对 T 的不可变引用)实现了 Send,则任何类型 T 都实现了 Sync,这意味着引用可以安全地发送到另一个线程。

与 Send 类似,基本类型都实现了 Sync,完全由实现 Sync 的类型组成的类型也实现了 Sync。

智能指针小结:

  • Rc<T>:没有实现 Send,也没有实现 Sync。
  • RefCell<T>:实现 Send(如果 T 实现 Send),没有实现 Sync。在运行时执行的借用检查的实现不是线程安全的。
  • Mutex<T>:实现了 Send 和 Sync,可以用于与多个线程共享访问。
  • MutexGuard<'a, T>:实现 Sync(如果 T 实现 Sync),没有实现 Send。

手动实现 Send 和 Sync 是不安全的

因为完全由实现 Send 和 Sync 的其他类型组成的类型也会自动实现 Send和 Sync,所以我们不需要手动实现这些特性。

作为 marker trait,它们甚至没有任何方法来实现。它们只是用于执行与并发相关的不变量。

手动实现这些特征涉及实现 unsafe 的 Rust 代码。构建不由 Send 和 Sync 部分组成的新并发类型需要仔细考虑以维护安全保证。

练习题

参考视频:

  1. https://www.bilibili.com/video/BV1LdovYrEVw

假设你正在设计一个数据库连接的 API:

struct DbConnection { /* ... */ }
impl DbConnection {
    fn query(&self) -> DbResult {
        /* ... */
    }
}

你的数据库不支持从同一连接进行并发查询。DbConnection 应该实现哪些 marker trait?

答:Send。

资源下载链接为: https://pan.quark.cn/s/f1ead55c4354 以下标题“H5页面模板源码,很不错的例子”暗示了我们讨论的主题是关于HTML5页面模板的源代码。HTML5是现代网页开发的核心技术,它提供了丰富的功能元素,让开发者能够构建出更具交互性、动态性响应式的网页。“很不错的例子”表明这些源码不仅具有实用性,还具备一定的教学意义,既可以作为项目开发的直接素材,也能供学习参考。 在描述“H5页面模板源码,非常酷炫的HTML5模板,可以直接使用,也可以参考学习”中,“非常酷炫”意味着这些模板可能融合了诸多高级特性,例如动画效果、媒体元素的运用以及响应式设计等,这些都是HTML5技术的优势所在。可以直接使用表明用户无需从零开始编写代码,能迅速搭建出吸引人的网页。同时,这些模板也适合学习,用户通过查看源代码可以了解特定设计功能的实现方式,从而提升自身的HTML5开发能力。 标签“H5 手机网页 H5源代码 手机html”进一步明确了主题。“H5”是HTML5的简称,“手机网页”“手机html”则强调这些模板是针对移动设备优化的。在如今移动优先的时代,适应各种屏幕尺寸触摸操作的网页设计极为重要。这表明这些源码很可能是响应式的,能够根据设备自动调整布局,以适配手机、平板电脑等多种设备。 从“压缩包文件的文件名称列表”来看,虽然无法直接从文件名得知具体源码内容,但可以推测这些文件可能包含多种HTML5模板示例。“不错的样子.txt”可能是一个介绍或说明文件,对模板进行简要描述或提供使用指南。而“1-30”这样的命名方式可能意味着有30个不同的模板实例,每个模板对应一个独立文件,涵盖多种设计风格功能,为学习实践提供了全面的平台。 总的来说,这个资源集合为HTML5开发者或初学者提供了一套实用且酷炫的移动网页模板源代码。这些模板既可以直接应用于项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值