22 releases (5 stable)

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

⚠️ Issues reported

#108 in Concurrency

Download history 5/week @ 2024-08-05 9/week @ 2024-08-26 80/week @ 2024-09-23 15/week @ 2024-09-30 7/week @ 2024-10-14 856/week @ 2024-11-04 315/week @ 2024-11-11 61/week @ 2024-11-18

1,232 downloads per month
Used in 7 crates (via ate)

LGPL-3.0

12KB
259 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);

No runtime deps