Strongly-linearizable objects are valuable building blocks for the design of concurrent data structures. Yet, many objects that have linearizable implementations from some set of objects do not have strongly-linearizable implementations from that set of objects. We focus on one such object with consensus number 2: the bag, a multiset from which processes can take arbitrary elements. We present the first lock-free, strongly-linearizable implementation of a bag from interfering objects (specifically, registers, test&set objects, and readable fetch&increment objects). We show that a previously proposed implementation is, in fact, not strongly-linearizable. Since a bag can be arbitrarily large, the amount of space that it requires must be unbounded. A more practical object is a $b$-bounded bag, which is a bag whose maximum capacity is $b$ elements. However, a 1-bounded bag has no lock-free, strongly-linearizable implementation from interfering objects. If we restrict the 1-bounded bag so that only one process can insert into it, we are able to obtain a wait-free, linearizable implementation and a lock-free, strongly-linearizable implementation from a bounded number of readable, resettable test&set objects and registers.
翻译:暂无翻译