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 |