3 个稳定版本
3.0.0 | 2023年7月31日 |
---|---|
2.0.0 | 2023年2月16日 |
1.0.0 | 2021年11月17日 |
在 并发 中排名 409
每月下载量 21 次
29KB
374 代码行
rt-history:一个具有错误检查的 RT 安全历史日志
这是一个有界无等待的线程同步原语,允许您在一个线程上记录某些数据的时间演变,并在其他线程上查询最后 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