What is Kovan?
Kovan solves the hardest problem in lock-free programming: when is it safe to free memory?
When multiple threads access shared data without locks, you can't just drop() or free() - another thread might still be using it. Kovan tracks this automatically with zero overhead on reads.
Why Kovan?
- Zero read overhead: Just one atomic load, nothing else
- Bounded memory: Never grows unbounded like epoch-based schemes
- Simple API: Three functions:
pin(),load(),retire()
Quick Start
[]
= "0.1"
Basic Usage
use ;
use Ordering;
// Create shared atomic pointer
let shared = new;
// Read safely
let guard = pin; // Enter critical section
let ptr = shared.load;
unsafe
drop; // Exit critical section
// Update safely
let guard = pin;
let new_value = Boxinto_raw;
let old = shared.swap;
// Schedule old value for reclamation
if !old.is_null
How It Works
pin()- Enter critical section, get a guardload()- Read pointer (zero overhead!)retire()- Schedule memory for safe reclamation
The guard ensures any pointers you load stay valid. When all guards are dropped, retired memory is freed automatically.
Examples
See the examples/ directory for complete implementations.
Performance
- 10x faster than naive implementations
- Competitive with Crossbeam-Epoch on reads
- Better memory bounds than epoch-based schemes
Optional Features
# Nightly optimizations (~5% faster)
= { = "0.1", = ["nightly"] }
# Handle stalled threads
= { = "0.1", = ["robust"] }
License
Licensed under Apache License 2.0.