Although a wide variety of handcrafted concurrent data structures have been proposed, there is considerable interest in universal approaches (henceforth called Universal Constructions or UCs) for building concurrent data structures. These approaches (semi-)automatically convert a sequential data structure into a concurrent one. The simplest approach uses locks that protect a sequential data structure and allow only one process to access it at a time. The resulting data structures use locks, and hence are blocking. Most work on UCs instead focuses on obtaining non-blocking progress guarantees such as obstruction-freedom, lock-freedom, or wait-freedom. Many non-blocking UCs have appeared. Key examples include the seminal wait-free UC by Herlihy, a NUMA-aware UC by Yi et al., and an efficient UC for large objects by Fatourou et al. We borrow ideas from persistent data structures and multi-version concurrency control (MVCC), most notably path copying, and use them to implement concurrent versions of sequential persistent data structures. Despite our expectation that our data structures would not scale under write-heavy workloads, they scale in practice. We confirm this scaling analytically in our model with private per-process caches.
翻译:虽然提出了各种各样的手工制作的并行数据结构,但人们对建立并行数据结构的普遍办法(此后称为通用建筑或UCs)很感兴趣,这些办法(半)自动将顺序数据结构转换成并行数据结构。最简单的办法使用锁来保护顺序数据结构,只允许一个过程一次访问它。由此产生的数据结构使用锁,从而阻碍数据结构。关于UCs的大多数工作则侧重于获得不阻碍进展的保证,例如阻碍自由、无锁或等待自由。许多非阻塞的UCs已经出现。关键的例子包括Herlihy的原始无等待UC、Yi等人的NUMA-aware UC和Fatourou等人的大型物体的有效UCs。我们借用了持续数据结构和多变调调调调控制(MVCC)的构想,最明显的是路径复制,并利用它们来实施同步版本的连续数据结构。尽管我们期望我们的数据结构将不以刻刻式格式进行刻刻的私人分析,但我们在这种分析过程中会确认它们的规模。