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
Performance is workload-dependent, but kovan is typically ~1.5x faster at multi-threaded scenarios due to lower contention on pin/unpin.
Pin Overhead
~36% faster pin/unpin cycle.
Treiber Stack (push+pop, 10k ops/thread)
~1.5x faster at multi-threaded scenarios due to lower contention on pin/unpin.
Read-Heavy (95% load, 5% swap)
~1.3x faster across all thread counts. Read-dominated workloads benefit most from kovan's lighter pin overhead.
Optional Features
# Nightly optimizations (~5% faster)
= { = "0.1", = ["nightly"] }
License
Licensed under Apache License 2.0.