Rust 并发编程实战课
晁岳攀(鸟窝)
前微博技术专家,知名微服务框架 rpcx 作者
668 人已学习
新⼈⾸单¥98
登录后,你可以任选4讲全文学习
课程目录
已更新 33 讲/共 38 讲
Rust 并发编程实战课
15
15
1.0x
00:00/00:00
登录|注册

29|浑然一体,一气呵成:atomic原子操作 (中)

你好,我是鸟窝。
在上节课,我们已经了解了原子操作的背景知识以及五种内存序的类型。这节课我们就要详细学习封装的原子类型以及各种原子操作,你也会看到内存序的使用。我还会在这节课带你了解 atomic 的使用场景。
Rust 中原子类型可以用来实现其他更高级的同步原语,它是处于更底层的同步原语,对于我们想更深入了解 Rust 并发原语,我们一定要掌握它。

atomic 类型

std::sync::atomic 模块提供了一系列原子操作的数据类型,这些数据类型对应于 Rust 的整数、布尔和指针类型, 它为这些类型提供了原子操作的能力。
虽然这个模块包含了很多的原子类型,每个原子类型又包含了巨多的方法,但是我在这节课中给你总结出它们的共同点,你只需要学会它们的共有的知识,就可以做到一通百通了。
首先我梳理了一张表格供你参考,这张表把原子类型分成了三类,所以我们就把 12 种原子类型简化到 3 种。
具体来说,它们被划分为以下三类:
AtomicBool:原子布尔类型。。
AtomicI8AtomicU8AtomicI16AtomicU16AtomicI32AtomicU32AtomicI64AtomicU64:固定大小的原子整数类型。比如 AtomicI8,此类型与底层整数类型 i8 具有相同的大小、对齐方式和位有效性。AtomicIsizeAtomicUsize:原子有符号 / 无符号整数类型(与平台指针大小相同)。
AtomicPtr<T>:原子原始指针类型。它使得指针本身的读写是原子的,但不保证指针指向的数据的有效性或线程安全性。解引用 AtomicPtr 获取的值通常需要 unsafe 代码块。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. Rust中的`std::sync::atomic`模块提供了一系列原子操作的数据类型,包括原子布尔类型、固定大小的原子整数类型和原子原始指针类型。 2. 原子类型的特点包括与底层整数类型相同的大小、对齐方式和位有效性,同时在并发环境下增加了安全性和可预测性。 3. 原子类型的方法包括`new`创建、`as_ptr`返回底层值的可变指针、`from_ptr`基于指针创建原子整数的新引用、`get_mut`返回可变引用、`get_mut_slice`从原子类型数组得到普通类型数组、`from_mut`从可变引用得到原子类型。 4. 使用原子类型的方法需要注意数据竞争问题,需要小心使用非原子读写,并在必要时使用`unsafe`代码块。 5. 原子操作的安全性和可预测性使得原子类型成为更高级同步原语的基础,对于深入了解Rust并发原语具有重要意义。 6. 原子操作方法包括`fetch_and`、`fetch_nand`、`fetch_not`、`fetch_or`、`fetch_xor`等,用于执行逻辑和位操作。 7. 原子整数类型提供了一系列原子操作方法,如`fetch_add`、`fetch_sub`、`fetch_max`等,用于执行算术和最值操作。 8. `AtomicIsize`和`AtomicUsize`类型与底层整数类型`isize`和`usize`相同,提供了类似的原子操作方法。 9. 原子操作方法需要注意内存序参数,对于不同的内存序会有不同的行为表现。 10. 原子操作方法的使用需要谨慎,特别是在并发环境下,需要考虑数据竞争和安全性问题。

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

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部