10个版本

0.0.10 2023年9月1日
0.0.9 2022年6月6日
0.0.7 2022年5月11日
0.0.5 2021年9月24日

#298异步

Download history 67/week @ 2024-04-15 70/week @ 2024-04-22 78/week @ 2024-04-29 15/week @ 2024-05-06 9/week @ 2024-05-13 64/week @ 2024-05-20 19/week @ 2024-05-27 22/week @ 2024-06-03 18/week @ 2024-06-10 118/week @ 2024-06-17 37/week @ 2024-06-24 48/week @ 2024-07-01 71/week @ 2024-07-08 112/week @ 2024-07-15 29/week @ 2024-07-22 36/week @ 2024-07-29

每月252次下载
5 个crates中使用了(直接使用2个)

Apache-2.0

48KB
952

双映射循环缓冲区

  • 线程安全。
  • 支持多个读取者。
  • 泛型。
  • 提供对所有项目的访问(不仅是n-1)。
  • 支持Linux、macOS、Windows和Android。
  • 同步、异步和非阻塞实现。
  • 泛型变体,允许指定自定义的通知器以简化集成。
  • 底层数据结构(即DoubleMappedBuffer)被导出,以允许自定义实现。

Crates.io Apache 2.0 licensed Build Status

概述

这种循环缓冲区实现将底层缓冲区映射两次,并连续地映射到进程的虚拟地址空间。这种配置允许循环缓冲区按顺序呈现可用的数据(即作为切片),而不必担心卷绕。

示例

use vmcircbuffer::sync;

let mut w = sync::Circular::new::<u32>()?;
let mut r = w.add_reader();

// delay producing by 1 sec
let now = std::time::Instant::now();
let delay = std::time::Duration::from_millis(1000);

// producer thread
std::thread::spawn(move || {
    std::thread::sleep(delay);
    let w_buff = w.slice();
    for v in w_buff.iter_mut() {
        *v = 23;
    }
    let l = w_buff.len();
    w.produce(l);
});

// blocks until data becomes available
let r_buff = r.slice().unwrap();
assert!(now.elapsed() > delay);
for v in r_buff {
    assert_eq!(*v, 23);
}
let l = r_buff.len();
r.consume(l);

贡献

除非您明确声明,否则任何有意提交以包含在项目中的贡献,均应按Apache 2.0许可,不附加任何其他条款或条件。

依赖项

~0.3–1.2MB
~22K SLoC