7. 并发控制:互斥 (2)

背景回顾:我们希望通过互斥实现 “stop the world” 的并发控制。在许多在共享内存上实现互斥的失败和成功尝试后,我们意识到软件需要和硬件协同工作,并在硬件原子指令基础上实现了基础版本的自旋锁。

本讲内容:分别如何在操作系统内核和用户态应用程序中实现互斥。

7.1 操作系统内核中的互斥

7.2 操作系统内核中的 (半) 无锁互斥 🌶️

7.3 应用程序中的互斥

Take-away Messages

“互斥” 看起来简单,用自旋就能实现,但如果在实际的场景 (例如可被中断的操作系统内核、不希望浪费 CPU 资源的应用程序等),实际的互斥实现就不再简单。我们在 xv6 的自旋锁实现中,发现了许多 “防御性编程” 的例子,先假设程序员可能会犯一切可能的错误——然后不断加以检查。而 “正确性完全由开发者负责” 的时代将要过去,我们将会在未来越来越多地看到编程语言中的机制,帮助我们写出正确的代码。

课后习题/编程作业

📚阅读材料

教科书 Operating Systems: Three Easy Pieces 上次课的阅读材料:

  • 第 25 章 - Dialogue on Concurrency
  • 第 26 章 - Concurrency and Threads
  • 第 27 章 - Thread API