#rcu #lockless #atomic

no-std rcu_cell

a lockless rcu cell implementation

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

⚠️ Issues reported

#227 in Concurrency

Download history 5/week @ 2026-01-29 5/week @ 2026-02-19 7/week @ 2026-03-05 10/week @ 2026-03-12 8/week @ 2026-03-26 6/week @ 2026-04-02 44/week @ 2026-04-09 11/week @ 2026-04-16 9/week @ 2026-04-23

70 downloads per month
Used in 10 crates (3 directly)

LGPL-3.0

25KB
575 lines

Build Status Current Crates.io Version Document

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