27 releases (10 stable)

new 1.1.5 Dec 8, 2024
1.1.0 Nov 13, 2024
0.2.3 Nov 8, 2024
0.1.11 Mar 9, 2023
0.1.3 Oct 29, 2018

⚠️ Issues reported

#95 in Concurrency

Download history 7/week @ 2024-08-25 2/week @ 2024-09-01 77/week @ 2024-09-22 18/week @ 2024-09-29 6/week @ 2024-10-13 1/week @ 2024-10-20 750/week @ 2024-11-03 405/week @ 2024-11-10 73/week @ 2024-11-17 8/week @ 2024-11-24 423/week @ 2024-12-01

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

LGPL-3.0

17KB
375 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

~110KB