Abstract
We present a technique - lock capabilities - for statically verifying that multithreaded programs with locks will not deadlock. Most previous work on deadlock prevention requires a strict total order on all locks held simultaneously by a thread, but such an invariant often does not hold with fine-grained locking, especially when data-structure mutations change the order locks are acquired. Lock capabilities support idioms that use fine-grained locking, such as mutable binary trees, circular lists, and arrays where each element has a different lock. Lock capabilities do not enforce a total order and do not prevent external references to data-structure nodes. Instead, the technique reasons about static capabilities, where a thread already holding locks can attempt to acquire another lock only if its capabilities allow it. Acquiring one lock may grant a capability to acquire further locks; in data-structures where heap shape affects safe locking orders, the heap structure can induce the capability-granting relation. Deadlock-freedom follows from ensuring that the capabilitygranting relation is acyclic. Where necessary, we restrict aliasing with a variant of unique references to allow strong updates to the capability-granting relation, while still allowing other aliases that are used only to acquire locks while holding no locks. We formalize our technique as a type-and-effect system, demonstrate it handles realistic challenging idioms, and use syntactic techniques (type preservation) to show it soundly prevents deadlock. Copyright © 2012 ACM.
Author supplied keywords
Cite
CITATION STYLE
Gordon, C. S., Ernst, M. D., & Grossman, D. (2012). Static lock capabilities for deadlock freedom. In Conference Record of the Annual ACM Symposium on Principles of Programming Languages (pp. 67–78). https://doi.org/10.1145/2103786.2103796
Register to see more suggestions
Mendeley helps you to discover research relevant for your work.