30 releases (13 stable)
| 1.2.1 | May 9, 2025 |
|---|---|
| 1.2.0 | Dec 27, 2024 |
| 1.1.0 | Nov 13, 2024 |
| 0.2.3 | Nov 8, 2024 |
| 0.1.3 | Oct 29, 2018 |
#227 in Concurrency
70 downloads per month
Used in 10 crates
(3 directly)
25KB
575 lines
RcuCell
A lockless rcu cell implementation that can be used safely in multithread context.
Features
- Support multi-thread read and write operations.
- The read operation would not block other read operations.
- The read operation is always waitless.
- The read operation is something like Arc::clone.
- The write operation would not block other read operations.
- The write operation is lockless.
- The write operation is something like Atomic Swap.
- The RcuCell could contain no data
- Could be compiled with no_std
Usage
use rcu_cell::RcuCell;
use std::sync::Arc;
let t = Arc::new(RcuCell::new(10));
let t1 = t.clone();
let t2 = t.clone();
let d1 = t1.take().unwrap();
assert_eq!(*d1, 10);
assert_eq!(t1.read(), None);
let d2 = t2.write(42);
assert!(d2.is_none());
let d3 = t2.read().unwrap();
assert_eq!(*d3, 42);
Dependencies
~105KB