TAG
并发编程
9 篇文章
- 并发编程(八):从 Mutex 到读写锁
沿用 counter 与 counter + ready 的例子,理解读写锁如何允许多个读者并发,以及 Java Lock API、Go sync.RWMutex 和 CPython 的对应情况。
- 并发编程(三):互斥锁——语言层的原子性、可见性与有序性
继续使用 counter++,理解互斥锁如何提供原子性、可见性和有序性,并比较 Java synchronized、Go sync.Mutex 与 CPython threading.Lock 的语义差异。
- 并发编程(二):语言内存模型——程序员可以依赖的规则
从硬件内存模型回到语言层,理解语言为什么需要定义内存模型,以及 Java、Go 与 CPython 分别为并发程序提供哪些基本保证。
- 并发编程(一):先谈硬件——从 count++ 到原子性、可见性与有序性
从冯·诺依曼体系结构和指令执行过程出发,沿着 count++ 分析硬件层面的原子性、可见性与有序性问题。
- 并发编程(零):并发问题与讨论范围
限定单机、单进程范围,从共享变量出发,建立共享内存、消息传递、语言并发语义与硬件实现之间的整体关系。
- 并发编程(七):volatile——ready 与 counter 的可见性和有序性
沿用 counter + ready 的例子,理解 Java volatile 提供的可见性和有序性保证,并说明 Go 和 Python 没有对应的 volatile 关键字。
- 并发编程(六):Atomic 的实现——从 Runtime 到 CPU
沿着 Java AtomicInteger、Go sync/atomic 和 CPython 内部原子操作的实现路径,理解 Atomic RMW 如何落到编译器、Runtime 与 CPU。
- 并发编程(五):Atomic——语言层的原子性、可见性与有序性
继续使用 counter 与 ready,理解 Atomic 操作提供的原子性、可见性和有序性,并比较 Java、Go 与 CPython 的公开语义。
- 并发编程(四):互斥锁的实现——从 Runtime 到 CPU
沿着 Java synchronized、Go sync.Mutex 和 CPython threading.Lock 的真实实现路径,理解互斥锁如何使用原子操作、内存顺序以及等待与唤醒。