Is Compare-and-Swap Really Necessary?

02/12/2018
by   Pankaj Khanchandani, et al.
0

The consensus number of a synchronization primitive, such as compare-and-swap or fetch-and-add, is the maximum number of processes n among which binary consensus can be solved by using read-write registers and registers supporting the synchronization primitive. As per Herlihy's seminal result, any synchronization primitive with consensus number n can be used to construct a wait-free and linearizable implementation of any non-trivial concurrent object or a data structure that is shared among n processes. As the compare-and-swap primitive has infinite consensus number and is widely supported by multi-processors, synchronization tasks have been typically solved using the compare-and-swap synchronization primitive. In this paper, we show that having compare-and-swap as the quintessential synchronization primitive for solving wait-free synchronization is not necessary. It is not necessary as we give an O(1) time wait-free and linearizable implementation of a compare-and-swap register for processes 1,2,...,n using registers that support the two weak synchronization primitives half-max and max-write, each with consensus number one. Thus, any algorithm that uses powerful compare-and-swap registers to solve some arbitrary synchronization problem among processes 1,2,..., n can be transformed into an algorithm that has the same asymptotic time complexity and only uses weak consensus number one primitives.

READ FULL TEXT

Please sign up or login with your details

Forgot password? Click here to reset