Parallel program design: a foundation
Parallel program design: a foundation
The temporal logic of reactive and concurrent systems
The temporal logic of reactive and concurrent systems
A logical approach to discrete math
A logical approach to discrete math
Practical implementations of non-blocking synchronization primitives
PODC '97 Proceedings of the sixteenth annual ACM symposium on Principles of distributed computing
Nonblocking algorithms and preemption-safe locking on multiprogrammed shared memory multiprocessors
Journal of Parallel and Distributed Computing
A discipline of multiprogramming: programming theory for distributed applications
A discipline of multiprogramming: programming theory for distributed applications
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
PVS: Combining Specification, Proof Checking, and Model Checking
CAV '96 Proceedings of the 8th International Conference on Computer Aided Verification
Obstruction-Free Synchronization: Double-Ended Queues as an Example
ICDCS '03 Proceedings of the 23rd International Conference on Distributed Computing Systems
Hazard Pointers: Safe Memory Reclamation for Lock-Free Objects
IEEE Transactions on Parallel and Distributed Systems
DCAS is not a silver bullet for nonblocking algorithm design
Proceedings of the sixteenth 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
A general lock-free algorithm using compare-and-swap
Information and Computation
Streamlining progress-based derivations of concurrent programs
Formal Aspects of Computing
Verifying Concurrent Data Structures by Simulation
Electronic Notes in Theoretical Computer Science (ENTCS)
Formalising progress properties of non-blocking programs
ICFEM'06 Proceedings of the 8th international conference on Formal Methods and Software Engineering
Formal verification of a lazy concurrent list-based set algorithm
CAV'06 Proceedings of the 18th international conference on Computer Aided Verification
Progress in deriving concurrent programs: emphasizing the role of stable guards
MPC'06 Proceedings of the 8th international conference on Mathematics of Program Construction
Proving that non-blocking algorithms don't block
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Temporal logic verification of lock-freedom
MPC'10 Proceedings of the 10th international conference on Mathematics of program construction
Quantitative Reasoning for Proving Lock-Freedom
LICS '13 Proceedings of the 2013 28th Annual ACM/IEEE Symposium on Logic in Computer Science
Hi-index | 0.00 |
Lock-free algorithms are designed to improve the performance of concurrent programs by maximising the potential for processes to operate in parallel. Lock-free algorithms guarantee that within the system as a whole, some process will eventually complete its operation (as opposed to guaranteeing that all operations will eventully complete). Since lock-free algorithms potentially allow a high degree of interference between concurrent processes, and because their progress property is non-trivial, it is difficult to be assured of their correctness without a formal, machine-checked verification. In this paper we describe a method for proving the lock-free progress property. The approach is based on the construction of a well-founded ordering on the set of processes. The method is demonstrated using a well-known lock-free stack algorithm as an example, and we describe how the proof was checked using a theorem prover.