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 在 异步
每月252次下载
在 5 个crates中使用了(直接使用2个)
48KB
952 行
双映射循环缓冲区
- 线程安全。
- 支持多个读取者。
- 泛型。
- 提供对所有项目的访问(不仅是n-1)。
- 支持Linux、macOS、Windows和Android。
- 同步、异步和非阻塞实现。
- 泛型变体,允许指定自定义的
通知器
以简化集成。 - 底层数据结构(即
DoubleMappedBuffer
)被导出,以允许自定义实现。
概述
这种循环缓冲区实现将底层缓冲区映射两次,并连续地映射到进程的虚拟地址空间。这种配置允许循环缓冲区按顺序呈现可用的数据(即作为切片),而不必担心卷绕。
示例
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