Because strongly-linearizable objects provide stronger guarantees than linearizability, they serve as valuable building blocks for the design of concurrent data structures. Yet, many objects that have linearizable implementations from base objects weaker than compare&swap objects do not have strongly-linearizable implementations from the same base objects. We focus on one such object: the bag, a multiset from which processes can take unspecified elements. We present the first lock-free, strongly-linearizable implementation of a bag from interfering objects (specifically, registers, and test&set objects). This may be surprising, since there are provably no such implementations of stacks or queues. Since a bag can contain arbitrarily many elements, an unbounded amount of space must be used to implement it. Hence, it makes sense to also consider a bag with a bound on its capacity. However, like stacks and queues, a bag with capacity $b$ shared by more than $2b$ processes has no lock-free, strongly-linearizable implementation from interfering objects. If we further restrict a bounded bag so that only one process can insert into it, we are able to obtain a lock-free, strongly-linearizable implementation from $O(b + n)$ interfering objects, where $n$ is the number of processes. Our goal is to understand the circumstances under which strongly-linearizable implementations of bags exist and, more generally, to understand the power of interfering objects.
翻译:由于强线性化对象提供了比线性化更强的保证,它们成为设计并发数据结构的重要构建模块。然而,许多能够通过弱于比较交换对象的基础对象实现线性化的对象,却无法通过相同的基础对象实现强线性化。我们聚焦于其中一类对象:包(bag),即一种进程可从中取出非特定元素的多重集合。我们首次提出了基于干扰对象(具体而言,寄存器和测试置位对象)的无锁、强线性化包实现。这一结果可能令人惊讶,因为栈和队列已被证明不存在此类实现。由于包可容纳任意多元素,其实现必须使用无界空间。因此,研究容量受限的包也具有重要意义。然而,与栈和队列类似,当容量为$b$的包被超过$2b$个进程共享时,无法基于干扰对象实现无锁的强线性化。若进一步限制有界包仅允许单一进程执行插入操作,我们能够基于$O(b + n)$个干扰对象实现无锁的强线性化方案,其中$n$为进程数量。本研究旨在探究包数据结构实现强线性化的条件,并更广泛地揭示干扰对象的计算能力。