跳到正文

Concurrency

并发编程

锁只是入门,内存序、数据布局和正确的等待方式才是并发的分水岭。

10 / 10 已发布 10 篇

基础 3 节

01

线程与进程模型

  • 并发的三种动机
  • 线程共享什么、隔离什么
  • 上下文切换的真实代价
  • 并发、并行与异步的区别
  1. 线程与进程模型
02

互斥锁与临界区

  • 数据竞争的准确定义
  • mutex/recursive/try_lock
  • 锁粒度与临界区最小化
  • 死锁四条件与破坏顺序
  1. 互斥锁与临界区
03

条件变量与等待通知

  • 为什么必须配谓词循环
  • 虚假唤醒与丢失唤醒
  • wait_for 与超时
  • 生产者消费者的第一个正确实现
  1. 条件变量与等待通知

进阶 4 节

04

同步工具族

  • 读写锁与适用负载
  • 信号量与计数资源
  • 屏障、once 与 call_once
  • 自旋锁与忙等什么时候划算
  1. 同步工具族
05

pthread 与 std::thread 对照

  • 两套 API 的等价与差异
  • detach/join 与生命周期
  • thread_local 与 TLS
  • 线程命名、优先级与亲和性
  1. pthread 与 std::thread 对照
06

任务队列与线程池

  • 无界队列为什么危险
  • 线程池参数如何定
  • 任务窃取与负载均衡
  • 优雅关闭与在途任务
  1. 任务队列与线程池
07

并发设计模式

  • future/promise 与异步结果
  • actor 模型与消息传递
  • 双检锁与惰性初始化
  • 读写数据快照
  1. 并发设计模式

高级 3 节

08

原子操作与内存序

  • atomic 与 lock-free 判定
  • relaxed/acquire/release/seq_cst
  • happens-before 与可见性
  • seq_cst 的代价与必要性
  1. 原子操作与内存序
09

无锁结构

  • CAS 循环与 ABA 问题
  • 无锁栈与队列实现
  • RCU 与读多写少
  • 无锁的内存回收难题
  1. 无锁结构
10

协程与异步模型

  • Reactor/Proactor 模型
  • epoll 与 io_uring 概览
  • C++20 协程机制
  • 有栈协程与无栈协程取舍
  1. 协程与异步模型