22 releases (5 stable)
new 1.1.0 | Nov 13, 2024 |
---|---|
0.2.3 | Nov 8, 2024 |
0.1.11 | Mar 9, 2023 |
0.1.10 | Apr 7, 2021 |
0.1.3 | Oct 29, 2018 |
#108 in Concurrency
1,172 downloads per month
Used in 7 crates
(via ate)
12KB
259 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);