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:
simple.rs- Basic usage patternstreiber_stack.rs- Lock-free stack implementation
Run examples:
Key Rules
- Always use a guard when accessing shared pointers
- Retire, don't drop - use
retire()instead ofBox::from_raw() - Add
RetiredNodeas first field in your structs
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 either of Apache License 2.0 or MIT license at your option.