深入探索并发编程系列(十)-Weakly-ordered CPU的由来
在这一系列博客中,我已经详细讨论了lock-free编程相关的一系列主题,比如Acquire与Release语义以及Weakly-ordered CPUs. 我已经努力尝试把这些主题讲的更加地通俗易懂,但大家都知道,Talk is cheap.没有言语比具体的例子更能把问题说清楚。
深入探索并发编程系列(九)-弱/强内存模型
存在许多种内存乱序注1,但它们发生的频率并不都是一样的。这取决于你的目标处理器以及开发工具链。
深入探索并发编程系列(八)-Acquire与Release语义
一般来说,在无锁(lock-free)注1编程中,线程有两种方法来操作共享内存:线程间相互竞争一种资源或者相互合作传递消息。Acquire与Release语义对后者来说很关键:保证在线程间可靠地相互传递消息。实际上,我大胆地猜测,不正确的或者缺乏Acquire与Release语义是导致无锁编程产生错误的最常见 原因。
深入探索并发编程系列(七)-内存屏障:资源控制操作
当你使用资源控制时, 那么你肯定在试图理解内存执行顺序。不管你是用C,C++还是其它语言,这都是在编写无锁(lock-free)代码时需要重点考虑的。
深入探索并发编程系列(六)-编译期间内存乱序
写在最前:掌握并发编程非常困难,除了多读书、多写代码、多调试、多和朋友讨论,别无他法。
深入探索并发编程系列(五)-将内存乱序逮个正着
当用C/C++编写无锁代码时,一定要小心谨慎,以保证正确的内存顺序。不然的话,会发生一些诡异的事情。
深入探索并发编程系列(四)-实现递归锁
当你要为多CPU核优化代码时,有时需要去实现一种新的同步原语。
虽然我不鼓励这么做,但这样的情况却时常发生。就在你打算开始这么做的时候,可能会先找一些例子来参考。这种过程无疑是搬起石头砸自己的脚,但却能减少你再次犯这种错误的次数,这样起码还能给你留下几个脚趾头继续走路。
深入探索并发编程系列(三)-自己动手实现轻量级锁
深入探索并发编程系列(二)-总是使用轻量级锁
在多线程编程中,我们会常说起锁(也叫互斥量)。但锁仅仅是个概念,要真正用上锁,需要将其实现。事实证明,存在许多实现锁的方法,不同方法在性能表现上却有很大的区别。
深入探索并发编程系列(一)-锁不慢;锁竞争慢
锁(也叫互斥量)在很长一段时间都被误解了。1986年,在Usenet的有关于多线程的讨论会中,Matthew Dillon说过:大多数人都对锁有个误解,认为锁是慢的。25年后,这种误解似乎在某一时间段又突然出现了。