Yebangyu's Blog

Fond of Concurrency Programming , Distributed System and Machine Learning

Materials In Concurrency Programming

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颗星

Shared Memory Synchronization

优点:

1,很新。2013年的书

2,选题不错。综合了上面两本

缺点:

1,鸡肋。初学者看了云里雾里,高手没必要看。

是作者实力不够吗?恐怕不是。作者Michael L. Scott是程序语言设计和并发编程的大拿。

是作者表述能力不行吗?恐怕不是。他写有一本非常著名和畅销的书籍:《Programming Language Pragmatics》

这本书偏综述+lecture notes性质,估计和这系列丛书的定位有关。

2,没有中文版,没有英文影印版,很难下到pdf。苦逼穷学生想阅读的话基本上只能去amazon.com购买原版

个人喜爱程度:2颗星

C++ Concurrency In Action

听说人民邮电出版社引进版权翻译了,据说翻译的糟糕透顶。我买了一本英文原版,挺贵的。哈哈。

优点:

1,介绍C++11来编写多线程程序。

2,涵盖了Hazard Pointer等一般教科书上不会出现的内容,还有一章介绍了lock free stack design。

缺点:

可能是我个人实力不行,感觉这本书讲的并不好,看完还是得看论文才懂。

个人喜爱程度:2颗星

Multi Core Programming

Intel的工程师写的。挺老的书了,但是还是很有用。

优点:

1,介绍了多线程编程中的基础知识,比如说什么是false sharing?什么是priority inversion?

2,第八章介绍了如何编写调试多线程程序的程序,强烈推荐!

个人喜爱程度:3颗星

Blog

Jeff Preshing’s Blog 英文版

Jeff Preshing’s Blog 中文翻译 + 注释解读版

Cliff Click’s Blog

Yebangyu’s Blog

Course

Parallel Computer Architecture and Programming @ CMU

Parallel Programming @ pdx

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

Lock-free Cuckoo Hashing

B+ Tree

A Lock-Free B+ Tree

A Lock-Free 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

Mathematizing C++ Concurrency

Pages

Memory model synchronization modes

Dekker’s Algorithm Does not Work, as Expected