Fast and Fair Lock-Free Locks
We present a randomized approach for lock-free locks with strong bounds on time and fairness in a context in which any process can be arbitrarily delayed. Our approach supports a tryLock operation that is given a set of locks, and code to run when all the locks are acquired. Given an upper bound κ known to the algorithm on the point contention for a tryLock it will succeed in acquiring its locks and running the code with probability at least 1/κ. It is thus fair. If the algorithm does not know the bound κ, we present a variant that can guarantee a probability of at least 1/κlogκ of success. Furthermore, if the maximum step complexity for the code in any lock is T, and the point contentions are constant, the attempt will take O(T) steps. The attempts are independent, thus if the tryLock is repeatedly retried on failure, it will succeed in O(T) expected steps, and with high probability in not much more. Importantly, however, retrying is not mandatory, and a process may choose to execute different code upon failure. We assume an oblivious adversarial scheduler, which does not make decisions based on the operations, but can predetermine any schedule for the processes, which is unknown to our algorithm. Furthermore, to account for applications that change their future requests based on the results of previous lock attempts, we strengthen the adversary by allowing decisions of the start times and lock sets of tryLock attempts to be made adaptively, given the history of the execution so far.
READ FULL TEXT