A Simple Abstraction for Complex Concurrent Indexes
File(s)splash2011.pdf (743.97 KB)
Accepted version
Author(s)
Pinto, PDR
Dinsdale-Young, T
Dodds, M
Gardner, P
Wheelhouse, M
Type
Journal Article
Abstract
Indexes – also known as associative arrays, dictionaries,
maps, or hashes – are abstract data-structures with myriad
applications, from databases to dynamic languages. Abstractly,
an index is a partial function from keys to values.
Values can be queried by their keys, and the index can be
mutated by adding or removing mappings. While appealingly
simple, this abstract view is insufficient for reasoning
about indexes that are accessed concurrently.
In this paper, we introduce an abstract specification which
views an index as a divisible resource. Multiple threads can
access the index concurrently, yet threads can still reason locally.
We show that this specification can be used to verify
a number of client applications. Our abstract specification
would mean little if it were not satisfied by the implementations
of concurrent indexes. We verify that our specification
is satisfied by linked list, hash table and BLink tree index implementations.
During verification, we uncovered a subtle
bug in the BLink tree algorithm.
maps, or hashes – are abstract data-structures with myriad
applications, from databases to dynamic languages. Abstractly,
an index is a partial function from keys to values.
Values can be queried by their keys, and the index can be
mutated by adding or removing mappings. While appealingly
simple, this abstract view is insufficient for reasoning
about indexes that are accessed concurrently.
In this paper, we introduce an abstract specification which
views an index as a divisible resource. Multiple threads can
access the index concurrently, yet threads can still reason locally.
We show that this specification can be used to verify
a number of client applications. Our abstract specification
would mean little if it were not satisfied by the implementations
of concurrent indexes. We verify that our specification
is satisfied by linked list, hash table and BLink tree index implementations.
During verification, we uncovered a subtle
bug in the BLink tree algorithm.
Date Issued
2011-10-01
Date Acceptance
2011-10-01
Citation
ACM Sigplan Notices, 2011, 46 (10), pp.845-864
ISSN
1523-2867
Publisher
Association for Computing Machinery (ACM)
Start Page
845
End Page
864
Journal / Book Title
ACM Sigplan Notices
Volume
46
Issue
10
Copyright Statement
© ACM, 2011. This is the author's version of the work. It is posted here by permission of ACM for your personal use. Not for redistribution. The definitive version was published in ACM SIGPLAN Notices - OOPSLA '11 Volume 46 Issue 10, October 2011. https://dx.doi.org/10.1145/2076021.2048131
Subjects
Science & Technology
Technology
Computer Science, Software Engineering
Computer Science
COMPUTER SCIENCE, SOFTWARE ENGINEERING
Algorithms
Theory
Verification
Concurrency
Indexes
B-Trees
Separation Logic
Publication Status
Published