Cave is an automated verification tool for proving memory safety and linearizability (that is, atomicity and functional correctness) of concurrent data structures. The tool consists of a program analyser implementing the RGSep action inference algorithm using the shape-value abstract domain, as well as a procedure for searching for linearisation point assignments.
There is also a prototype extension of Cave for verifying lock-freedom of concurrent algorithms. For more information, see here.
Cave is written in OCaml and is released under a BSD-style license.
Specifications: stack, queue, set.
Name | Description |
---|---|
Treiber | Treiber's stack |
Treiber_ext | Treiber's stack (extended version) |
DCAS_stack | DCAS-based stack |
DCAS_stack_ext | DCAS-based stack (extended version) |
2lock_queue | Michael and Scott two-lock queue |
2lock_queue_ext | Michael and Scott two-lock queue (extended version) |
MSqueue | Michael and Scott non-blocking queue |
MSqueue_ext | Michael and Scott non-blocking queue (extended version) |
DGLMqueue | Doherty et al. non-blocking queue |
DGLMqueue_ext | Doherty et al. non-blocking queue (extended version) |
CG_set | Coarse-grain set |
CG_set_lfc | Coarse-grain set + lock-free contains |
CG_set_nd | Coarse-grain set + no memory dispose |
LC_set | Lock-coupling set (a.k.a., pessimistic set) |
LC_set_lfc | Lock-coupling set + lock-free contains |
LC_set_nd | Lock-coupling set + no memory dispose |
Vaf_DCAS_set | DCAS-based set with repointing delete |
Vechev_DCAS_set | Vechev and Yahav DCAS-based set |
Name | Description |
---|---|
Counter | CAS-based counter |
TwoCounter | Double CAS-based counter |
Treiber | Treiber's stack |
DCAS_stack | DCAS-based stack |
HSY | Hendler et al. elimination stack |
MSqueue | Michael and Scott non-blocking queue |
DGLMqueue | Doherty et al. non-blocking queue |