What Can Be Done with Consensus Number One: Relaxed Queues and Stacks
Sequentially specified linearizable concurrent data structures must be relaxed in order to support scalability. In this work, we identify and formally define relaxations of queues and stacks that can be non-blocking or wait-free implemented using only read/write operations. We use set-linearizability to specify the relaxations formally, and precisely identify the subset of executions which preserve the original sequential behavior. The relaxations allow for an item to be extracted more than once by different operations, but only in case of concurrency; we call such a property multiplicity. The stack implementation is wait-free, while the queue implementation is non-blocking. We also use interval-linearizability to describe a queue with multiplicity, with the additional and new relaxation that a dequeue operation can return weak-empty, which means that the queue might be empty. We present a read/write wait-free implementation of the interval-sequential queue. As far as we know, this work is the first that provides simple and clear formalizations of the notions of multiplicity and weak-emptiness, which can be implemented from read/write registers only.
READ FULL TEXT