Prerequisite
对CPU、内存、Cache有一个很好的认识,对学习并发编程有很大的帮助。
What Every Programmer Should Know About Memory
A Primer on Memory Consistency and Cache Coherence
Textbook
Is Parallel Programming Hard, And, If So, What Can You Do About It?
Paul大叔的神作。
优点:
1,很全面,除了介绍lock的实现、RCU、Transaction Memory等等之外,还包括一些并发程序设计的其他知识,比如如何验证、如何调试等。
个人非常喜欢第14章和附录C,分别详细介绍了什么是Memory Barrier以及为什么需要Memory Barrier。强烈推荐!
2,很正派。这里面介绍的技术都非常通用,普遍适用,没有太多的黑科技。比如书中重点强调的partition,就是一种非常重要、非常scientific的思想。
3,很幽默。真的,很幽默。
缺点:因为正派,所以就没有介绍 lock free data structure 设计这些很tricky的黑科技,算是不足吧。
个人喜爱程度:5颗星
The Art of Multiprocessor Programming
被很多人推崇。第一版有很多错误,作者随后推出了revised版本。
优点:市面上目前能见到的唯一一本包括大量Lock Free Data Structure 实现的书籍。
缺点:
1,Java语言实现。个人固执认为应该用C或者C++。代码质量也很一般,甚至有错,和书里正文内容描述不符。
2,没有介绍RCU等重要内容
3,不详细。可能是我个人实力不行,感觉这本书讲的并不好,看完还是得看论文才懂。
书中有一大章节详细介绍了各种spin lock的实现,强烈推荐!!!
从某个渠道里获知,作者正在编写本书第二版,快要出版了。不过还是Java实现,sigh。
个人喜爱程度:3颗星
优点:
1,很新。2013年的书
2,选题不错。综合了上面两本
缺点:
1,鸡肋。初学者看了云里雾里,高手没必要看。
是作者实力不够吗?恐怕不是。作者Michael L. Scott是程序语言设计和并发编程的大拿。
是作者表述能力不行吗?恐怕不是。他写有一本非常著名和畅销的书籍:《Programming Language Pragmatics》
这本书偏综述+lecture notes性质,估计和这系列丛书的定位有关。
2,没有中文版,没有英文影印版,很难下到pdf。苦逼穷学生想阅读的话基本上只能去amazon.com购买原版
个人喜爱程度:2颗星
听说人民邮电出版社引进版权翻译了,据说翻译的糟糕透顶。我买了一本英文原版,挺贵的。哈哈。
优点:
1,介绍C++11来编写多线程程序。
2,涵盖了Hazard Pointer等一般教科书上不会出现的内容,还有一章介绍了lock free stack design。
缺点:
可能是我个人实力不行,感觉这本书讲的并不好,看完还是得看论文才懂。
个人喜爱程度:2颗星
Intel的工程师写的。挺老的书了,但是还是很有用。
优点:
1,介绍了多线程编程中的基础知识,比如说什么是false sharing?什么是priority inversion?
2,第八章介绍了如何编写调试多线程程序的程序,强烈推荐!
个人喜爱程度:3颗星
Blog
Jeff Preshing’s Blog 中文翻译 + 注释解读版
Course
Parallel Computer Architecture and Programming @ CMU
Paper
Linked List & Skip List
A Pragmatic Implementation of Non-Blocking Linked-Lists
Lock Free Linked Lists and Skip Lists
Lock Free Linked Lists and Skip Lists
Split-Ordered Lists: Lockfree Extensible Hash Tables
A Provably Correct Scalable Concurrent Skip List
Stack
A Scalable Lock Free Stack Algorithm
Queue
Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms
Fast and Lock Free Concurrent Priority Queues for Multi-Thread Systems
An Optimistic Approach to Lock Free FIFO Queues
Hash Map
Efficient Almost Wait Free Parallel Accessible Dynamic Hash-tables
Non-Blocking Hash-Tables With Open Addressing
A Lazy Concurrent List-Based Set Algorithm
High Performance Dynamic Lock-Free Hash Tables and List-Based Sets
Cuckoo Hash Map
B+ Tree
Others
Hazard Pointers: Safe Memory Reclamation For Lock-Free Objects
Lock Free Techniques for Concurrent Access to Shared Objects
Non-Blocking Algorithms and Preemption-Safe Locking on Multiprogrammed Shared Memory Multiprocessors
Obstruction-Free Synchronization: Double-Ended Queues as an Example
Safe Memory Reclamation for Dynamic Lock Free Objects Using Atomic Reads and Writes
Non-blocking Memory Management Support for Dynamic-Sized Data Structures
Bringing Practical Lock Free Synchronization to 64Bit Applications
Scalable Lock-Free Dynamic Memory Allocation
Are Lock-Free Concurrent Algorithms Practically Wait-Free