Locked-Free Data Structures笔记

Andrei Alexandrescu 07的文章:http://erdani.com/publications/cuj-2004-10.pdf

03年Maurice Herlihy因为他91年的文章"Wait-Free Synchronization"被授予Dijkstra分布式计算奖,将来可能会导致硬件架构进行升级。他证明了要构建wait-free数据结构,哪些原语(primitive)是好的,哪些原语不适合。比如,论文中给出反例,证明test-and-set,swap,fetch-and-add,原子队列等原语对于合理实现多余两个线程间的同步并不充分。而有一些简单结构足以实现任意数量线程的无锁算法。

最简单最常用且具有普适性的原语之一,就是CAS(compare-and-set),这在多数cpu上都有实现。多数32位处理器上可以支持64位的CAS,intel的汇编指令叫CMPXCHG8.

所谓的无等过程(wait-free procedure)是指不管线程多少,一个线程总是可以在有限步数内完成。

无锁过程(lock-free procedure)是指至少有一个线程在真正执行。

后面实现了WRRM map(Write Rarely Read Many),思路是copy on write。

如果在有gc的环境中,到此就ok了,而如果没有gc,则需要回收旧的map对象,引入引用计数和更多CAS。最后发现现在update是有锁操作了,需要等到引用计数是1的情况下才能更新,最好导致读的并发量也不能太大。

结论是:考虑到内存释放,无锁编程会非常tricky。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章