Acta Informatica
Linearizability: a correctness condition for concurrent objects
ACM Transactions on Programming Languages and Systems (TOPLAS)
Data refinement by calculation
Acta Informatica
ACM Transactions on Programming Languages and Systems (TOPLAS)
The Z notation: a reference manual
The Z notation: a reference manual
Programming from specifications (2nd ed.)
Programming from specifications (2nd ed.)
Nonblocking algorithms and preemption-safe locking on multiprogrammed shared memory multiprocessors
Journal of Parallel and Distributed Computing
Reduction: a method of proving properties of parallel programs
Communications of the ACM
Distributed Algorithms
The Repeat Offender Problem: A Mechanism for Supporting Dynamic-Sized, Lock-Free Data Structures
DISC '02 Proceedings of the 16th International Conference on Distributed Computing
CONCUR '98 Proceedings of the 9th International Conference on Concurrency Theory
Trace Refinement of Action Systems
CONCUR '94 Proceedings of the Concurrency Theory
Obstruction-Free Synchronization: Double-Ended Queues as an Example
ICDCS '03 Proceedings of the 23rd International Conference on Distributed Computing Systems
A Practical Nonblocking Queue Algorithm Using Compare-and-Swap
ICPADS '00 Proceedings of the Seventh International Conference on Parallel and Distributed Systems
Pretending Atomicity
Static analysis of atomicity for programs with non-blocking synchronization
Proceedings of the tenth ACM SIGPLAN symposium on Principles and practice of parallel programming
Using elimination to implement scalable and lock-free FIFO queues
Proceedings of the seventeenth annual ACM symposium on Parallelism in algorithms and architectures
Formal Verification of an Array-Based Nonblocking Queue
ICECCS '05 Proceedings of the 10th IEEE International Conference on Engineering of Complex Computer Systems
Reasoning about Nonblocking Concurrency using Reduction
ICECCS '07 Proceedings of the 12th IEEE International Conference on Engineering Complex Computer Systems
Derivation of a Scalable Lock-Free Stack Algorithm
Electronic Notes in Theoretical Computer Science (ENTCS)
Comparison under abstraction for verifying linearizability
CAV'07 Proceedings of the 19th international conference on Computer aided verification
Hi-index | 0.00 |
Lock-free algorithms have been developed to avoid various problems associated with using locks to control access to shared data structures. Instead of preventing interference between processes using mutual exclusion, lock-free algorithms must ensure correct behaviour in the presence of interference. While this avoids the problems with locks, the resulting algorithms are typically more intricate than lock-based algorithms, and allow more complex interactions between processes. The result is that even when the basic idea is easy to understand, the code implementing lock-free algorithms is typically very subtle, hard to understand, and hard to get right. In this paper, we consider the well-known lock-free queue implementation due to Michael and Scott, and show how a slightly simplified version of this algorithm can be derived from an abstract specification via a series of verifiable refinement steps. Reconstructing a design history in this way allows us to examine the kinds of design decisions that underlie the algorithm as describe by Michael and Scott, and to explore the consequences of some alternative design choices. Our derivation is based on a refinement calculus with concurrent composition, combined with a reduction approach, based on that proposed by Lipton, Lamport, Cohen, and others, which we have previously used to derive a scalable stack algorithm. The derivation of Michael and Scott's queue algorithm introduces some additional challenges because it uses a ''helper'' mechanism which means that part of an enqueue operation can be performed by any process, also in a simulation proof the treatment of dequeue on an empty queue requires the use of backward simulation.