Language-Level Transactions for Modular Reliable Systems
Abstract
The authors show how to integrate non-blocking transactions into an object-oriented language, "transactifying" existing code to fix existing concurrency bugs and using transactions for modular fault-tolerance, backtracking, exception-handling, and concurrency control in new programs. We propose the use of compiler-supported atomic blocks to specify synchronization. This is less error-prone than manual maintenance of a locking discipline: deadlocks may be introduced when locks are not acquired and released in a highly disciplined manner, and the specification of locking discipline cuts across module boundaries. Races are common when multiple shared objects are involved in an operation, each with its own lock. We provide several examples of such problematic locking codes. A non-blocking transaction implementation prevents inadvertent deadlocks, and atomic declarations implemented with the transaction mechanism can extend across method invocations and module boundaries to protect multiple objects involved in an operation without allowing races between them. An optimistic non-blocking implementation provides performance improvements over locking strategies in some cases as well.
Document Details
- Document Type
- Technical Report
- Publication Date
- Sep 30, 2004
- Accession Number
- ADA433636
Entities
People
- C. S. Ananian
- Martin Rinard
Organizations
- Massachusetts Institute of Technology