Skip to main content

Rust 锁和并发的底层实现

Rust 系列的这几本书可以先从 Concurrent 看, 然后是 system, 然后再 low level lock.

Rust automics and locks 这本书提供了 Rust 语言的底层各种并发机制的总览, 包含线程, 锁, 引用计数, 原子类型, 信箱和通道等.

书中介绍了和 CPU 和操作系统相关的问题, 其中和操作系统相关的介绍讲了如何在 Liunx, macOS, Windows 上写出正确的并发代码, 书中总结了信号量, 无锁链表, 锁队列, 顺序锁, 以及 RCU.

书中详细主题包括:

  1. Rust 并发基础

    本章介绍和 Rust 并发有关的所有基本工具和概念, 比如线程, 互斥, 线程安全, 引用(共享或互斥), 内部可变等. 这些是全书的基础.

  2. 原子性

    介绍 Rust 的原子类型及其相关操作, 并通过一个 "对比->交换" 循环, 探索一些实际编程中的使用场景.

  3. Memory Ordering

    探索内存模型是如何工作的, 什么是 "happens-before" 关系, 如何构造出这种关系, 各种 memory ordering 的含义, 以及为什么顺序一致的 ordering 不是所有问题的解决方案.

  4. 实现自旋锁

    有了前面三章基础, 本章实现我们自己的并发原子类型, 通过一个简洁但全面的自旋锁示例进行说明.

  5. 实现 Channel

    本章实现一个自己的 channel, 用于在线程间发送数据.

  6. 首先 Arc

    从零开始实现我们自己的原子引用计数类型, 并提供 weak pointer 以及性能优化, 最终达到和标准库 Arc 类型类似的效果.

  7. 理解处理器

    本章包括许多底层细节, 探索在处理器层面上的运作详情, 比如原子操作对应的汇编指令在两个主流处理器架构上都长什么样? 什么是缓存? 缓存是如何影响到我们的代码性能的? 硬件层面上的内存模型是怎样的?

  8. 操作系统解析

    本章说明了一些我们必须在操作系统内核协助下才能完成的功能, 以及在三个主流操作系统下的可用功能. 同时讨论 POSIX 实现系统提供的基本并发支持, 以及使用 Windows API 实现类似能力, 另外也会讲 Linux 的 futex 系统调用.

  9. 实现 Lock

    有了前面的介绍作为基础, 本章从零开始介绍互斥锁, 条件变量, 读写锁的几种实现.

  10. 高级主题

    最后一章为我们指引了读完前面章节后可以继续探索的主题.