Rust_Atomics_and_Locks icon indicating copy to clipboard operation
Rust_Atomics_and_Locks copied to clipboard

Rust Atomics and Locks (中文翻译)

第一章:Rust 并发基础

  • Rust 中的线程
  • 作用域内的线程
  • 共享所有权以及引用计数
    • 静态值(static)
    • 泄漏(Leak)
    • 引用计数
  • 借用和数据竞争
  • 内部可变性CellRefCell互斥锁以及读写锁AtomicUnsafeCell
  • 线程安全:Send 和 Sync
  • 锁:互斥锁和读写锁
    • Rust 的互斥锁
    • 锁中毒
    • 读写锁
  • 等待:阻塞和条件变量
    • 线程阻塞
    • 条件变量
  • 总结

第二章:Atomic

  • Atomic 的加载和存储操作
    • 示例:停止标识
    • 示例:进度报道
      • 同步
    • 示例:惰性初始化
  • 获取并修改操作
    • 示例:来自多线程的进度报道
    • 示例:统计数据
    • 示例:ID 分配
  • 比较并交互操作
    • 示例:没有溢出的 ID 分配
    • 示例:惰性一次性初始化
  • 总结

第三章:内存排序

  • 重排和优化
  • 内存模型
  • Happens-Before 关系
    • spawn 和 join
  • Relaxed 排序
  • Release 和 Acquire 排序
    • 示例:锁定
    • 示例:使用间接的方式惰性初始化
  • Consume 排序
  • 顺序一致性排序
  • 屏障(Fence)
  • 常见的误解
  • 总结

第四章:构建我们自己的自旋锁

  • 一个最小实现
  • 一个不安全的自旋锁
  • 使用锁守卫的安全接口
  • 总结

第五章:构建我们自己的 Channel

  • 一个简单的以 mutex 为基础的 Channel
  • 一个不安全的一次性 Channel
  • 通过运行时检查来达到安全
  • 通过类型来达到安全
  • 借用以避免内存分配
  • 阻塞
  • 总结

第六章:构建我们自己的“Arc”

  • 基础的引用计数
    • 测试它
    • 可变性
  • Weak 指针
    • 测试它
    • 优化
  • 总结

第七章:理解处理器

  • 处理器指令
    • 加载和存储操作
    • 读并修改并写操作
      • x86 lock 前缀
      • x86 比较并交换指令
    • ll-和-sc-指令
      • arm-的-ldxr-和-stxr-指令
      • arm-的比较并交换操作
  • 缓存
    • 缓存一致性
      • write-through 协议
      • MESI 协议
    • 对性能的影响
  • 重排
  • 内存排序
    • x86-64:强排序
    • ARM64:弱排序
    • 一个实验
    • 内存屏障
  • 总结

第八章:操作系统原语

  • 使用内核接口
  • POSIX
    • 在 Rust 中包装类型
  • Linux
    • Futex
    • Futex 操作
    • 优先继承 Futex 操作
  • macOS
    • os_unfair_lock
  • Windows
    • 重量级内核对象
    • 轻量级对象
      • 精简的读写锁(SRW)
    • 基于地址的等待
  • 总结

第九章:构建我们自己的「锁」

  • Mutex
    • 避免系统调用
    • 进一步优化
    • 基准测试
  • 条件变量
    • 避免系统调用2
    • 避免虚假唤醒
  • 读写锁
    • 避免 writer 忙碌循环
    • 避免 writer 陷入饥饿
  • 总结

第十章:理念和灵感

  • 信号量
  • RCU
  • 无锁链表
  • 基于队列的锁
  • 基于阻塞的锁
  • 顺序锁
  • 教学材料

索引

注明:本文译自 https://marabos.nl/atomics/,若其它平台引用此翻译,也请注明出处。

加入我们,编写索引或者进行校对以帮助更多的人