第八章:并发# 引言 本章导读 线程定义 同步互斥 互斥锁 条件变量 信号量 实践体验 本章代码树 本章代码导读 线程设计与实现 同步互斥机制的设计实现 用户态的线程管理 本节导读 用户态多线程应用 多线程的基本执行环境 线程的结构与执行状态 线程管理运行时初始化 线程创建 线程切换 开始执行 内核态的线程管理 本节导读 线程概念 通用操作系统多线程应用程序示例 线程模型与重要系统调用 线程的创建 简单线程管理 线程退出及资源回收 进程相关的系统调用 应用程序示例 系统调用封装 多线程应用程序 线程管理的核心数据结构 通用资源分配器及线程相关的软硬件资源 进程和线程控制块 任务管理器与处理器管理结构 线程管理机制的设计与实现 线程生命周期管理 线程创建 线程退出 等待线程结束 线程执行中的特权级切换和调度切换 互斥锁 本节导读 引子:多线程计数器 锁的简介 锁机制的形态与功能 锁的使用方法 评价锁实现的指标 锁的纯用户态软件实现 单标记的简单尝试 多标记的组合 基于硬件机制及特殊指令的锁实现 关闭中断 原子指令 常用的 CAS 和 TAS 指令 RISC-V 架构上的原子指令 原子指令小结 在操作系统支持下实现让权等待 忙等 通过 yield 暂时让权 阻塞 实现阻塞与唤醒机制 基于阻塞机制实现 sleep 系统调用 基于阻塞机制实现锁机制 小结 参考文献 信号量机制 本节导读 信号量的起源和基本思路 信号量的使用方法 信号量的系统调用接口 信号量的应用 条件同步问题 生产者和消费者问题 实现信号量 小结 参考文献 条件变量机制 本节导读 条件变量的背景 管程与条件变量 条件变量系统调用 条件变量的使用方法 条件同步问题 同步屏障问题 实现条件变量 参考文献 并发中的问题 本节导读 互斥缺陷 同步缺陷 死锁缺陷 死锁预防 死锁避免 银行家算法的数据结构 银行家算法的步骤 安全性检查算法 练习 课后练习 编程题 问答题 实验练习 编程作业 银行家算法——分数更新 实现 eventfd 实验要求 问答作业 实验练习的提交报告要求 练习参考答案 课后练习 编程题 问答题 实验练习 编程作业 银行家算法——分数更新 实现 eventfd 实验要求 问答作业 实验练习的提交报告要求