3 个稳定版本

3.0.0 2023年7月31日
2.0.0 2023年2月16日
1.0.0 2021年11月17日

并发 中排名 409

每月下载量 21

MPL-2.0 许可证

29KB
374 代码行

rt-history:一个具有错误检查的 RT 安全历史日志

On crates.io On docs.rs Continuous Integration Requires rustc 1.64+

这是一个有界无等待的线程同步原语,允许您在一个线程上记录某些数据的时间演变,并在其他线程上查询最后 N 个数据点。

根据无等待同步的定义,生产者和消费者线程不能相互等待,因此在不良条件下(缓冲区大小太小、线程优先级太低、系统负载过重...),可能会出现两个竞态条件

  • 生产者可能相对于消费者运行得太快,覆盖消费者仍在读取的历史数据。这种缓冲区溢出场景已报告,包括溢出的程度,可用于指导系统参数调整,以停止错误发生。
  • 生产者可能相对于消费者运行得太慢,在两次消费者读取之间未能写入足够的新数据。这种缓冲区欠载错误的精确定义是工作负载相关的,因此我们提供了一种最新的数据点时间戳来检测它,但我们自己不处理它。
let (mut input, output) = RTHistory::<u8>::new(8).split();

let in_buf = [1, 2, 3];
input.write(&in_buf[..]);

let mut out_buf = [0; 3];
assert_eq!(output.read(&mut out_buf[..]), Ok(3));
assert_eq!(in_buf, out_buf);

依赖项

~0.5–1MB
~20K SLoC