Verifying properties of parallel programs: an axiomatic approach
Communications of the ACM
A new solution of Dijkstra's concurrent programming problem
Communications of the ACM
Reduction: a method of proving properties of parallel programs
Communications of the ACM
Extended static checking for Java
PLDI '02 Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation
A Discipline of Programming
Proceedings of the 2003 ACM SIGPLAN international workshop on Types in languages design and implementation
A Compositional Proof System for Shared Variable Concurrency
FME '97 Proceedings of the 4th International Symposium of Formal Methods Europe on Industrial Applications and Strengthened Foundations of Formal Methods
Obstruction-Free Synchronization: Double-Ended Queues as an Example
ICDCS '03 Proceedings of the 23rd International Conference on Distributed Computing Systems
Separation and information hiding
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Hazard Pointers: Safe Memory Reclamation for Lock-Free Objects
IEEE Transactions on Parallel and Distributed Systems
VYRD: verifYing concurrent programs by runtime refinement-violation detection
Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation
Static analysis of atomicity for programs with non-blocking synchronization
Proceedings of the tenth ACM SIGPLAN symposium on Principles and practice of parallel programming
Exploiting Purity for Atomicity
IEEE Transactions on Software Engineering
Runtime Analysis of Atomicity for Multithreaded Programs
IEEE Transactions on Software Engineering
Modular verification of a non-blocking stack
Proceedings of the 34th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A semantics for concurrent separation logic
Theoretical Computer Science
Electronic Notes in Theoretical Computer Science (ENTCS)
A Structural Proof of the Soundness of Rely/guarantee Rules
Journal of Logic and Computation
TACAS'08/ETAPS'08 Proceedings of the Theory and practice of software, 14th international conference on Tools and algorithms for the construction and analysis of systems
Boogie: a modular reusable verifier for object-oriented programs
FMCO'05 Proceedings of the 4th international conference on Formal Methods for Components and Objects
An annotation assistant for interactive debugging of programs with common synchronization idioms
Proceedings of the 7th Workshop on Parallel and Distributed Systems: Testing, Analysis, and Debugging
Sequential verification of serializability
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Line-up: a complete and automatic linearizability checker
PLDI '10 Proceedings of the 2010 ACM SIGPLAN conference on Programming language design and implementation
Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 2
Separating functional and parallel correctness using nondeterministic sequential specifications
HotPar'10 Proceedings of the 2nd USENIX conference on Hot topics in parallelism
Composable specifications for structured shared-memory communication
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Instrumentation and sampling strategies for cooperative concurrency bug isolation
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
VSTTE'10 Proceedings of the Third international conference on Verified software: theories, tools, experiments
A separation logic for refining concurrent objects
Proceedings of the 38th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Run-time verification of optimistic concurrency
RV'10 Proceedings of the First international conference on Runtime verification
Liveness of communicating transactions
APLAS'10 Proceedings of the 8th Asian conference on Programming languages and systems
Reduction of interrupt handler executions for model checking embedded software
HVC'09 Proceedings of the 5th international Haifa verification conference on Hardware and software: verification and testing
NDSeq: runtime checking for nondeterministic sequential specifications of parallel correctness
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Verification of semantic commutativity conditions and inverse operations on linked data structures
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Resource-sensitive synchronization inference by abduction
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Logical concurrency control from sequential proofs
ESOP'10 Proceedings of the 19th European conference on Programming Languages and Systems
Simplifying linearizability proofs with reduction and abstraction
TACAS'10 Proceedings of the 16th international conference on Tools and Algorithms for the Construction and Analysis of Systems
Preemption sealing for efficient concurrency testing
TACAS'10 Proceedings of the 16th international conference on Tools and Algorithms for the Construction and Analysis of Systems
Linearizability with ownership transfer
CONCUR'12 Proceedings of the 23rd international conference on Concurrency Theory
Verifying concurrent memory reclamation algorithms with grace
ESOP'13 Proceedings of the 22nd European conference on Programming Languages and Systems
Analysis of Recursively Parallel Programs
ACM Transactions on Programming Languages and Systems (TOPLAS)
An epistemic perspective on consistency of concurrent computations
CONCUR'13 Proceedings of the 24th international conference on Concurrency Theory
Proceedings of the 41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages
On Automation in the Verification of Software Barriers: Experience Report
Journal of Automated Reasoning
Hi-index | 0.00 |
We present a proof calculus and method for the static verification of assertions and procedure specifications in shared-memory concurrent programs. The key idea in our approach is to use atomicity as a proof tool and to simplify the verification of assertions by rewriting programs to consist of larger atomic actions. We propose a novel, iterative proof style in which alternating use of abstraction and reduction is exploited to compute larger atomic code blocks in a sound manner. This makes possible the verification of assertions in the transformed program by simple sequential reasoning within atomic blocks, or significantly simplified application of existing concurrent program verification techniques such as the Owicki-Gries or rely-guarantee methods. Our method facilitates a clean separation of concerns where at each phase of the proof, the user worries only about only either the sequential properties or the concurrency control mechanisms in the program. We implemented our method in a tool called QED. We demonstrate the simplicity and effectiveness of our approach on a number of benchmarks including ones with intricate concurrency protocols.