22 个版本
新版本 0.3.2 | 2024 年 8 月 19 日 |
---|---|
0.3.1 | 2024 年 8 月 15 日 |
0.3.0 | 2024 年 7 月 26 日 |
0.2.6 | 2024 年 7 月 20 日 |
0.1.11 | 2024 年 6 月 30 日 |
#120 in 并发
799 每月下载量
在 10 个 crates (8 直接)中使用
130KB
3.5K SLoC
RTSC - 实时同步组件
实时应用程序中的数据同步需求与传统的高负载应用程序不同。主要区别在于实时同步组件必须谨慎遵循传统的操作系统方法,避免用户空间自旋循环和其他忙等待技术(参见 Rust 中的通道。第 2 部分,其中此类问题被清晰地描述)。
组件
此 crate 提供了一组适用于各种典型和自定义用例的实时安全同步组件。
- 数据缓冲区
- 同步单元
- 同步/异步通道
- 基于策略的通道
- 信号量
- 时间工具
锁定策略
所有组件都支持默认和自定义锁定策略,这意味着 Mutex 和 Condvar 实现可以替换为第三方实现,以供每个组件实例使用。
这允许在各种环境中使用 RTSC 组件,例如
-
对于标准实时:使用 parking_lot_rt(Linux 以外的所有系统的默认值)。
-
对于安全关键型实时使用提供的 [
pi
] 组件,这些组件支持优先级继承(Linux 的默认值,仅在 Linux 上工作,建议内核 5.14+)。 -
对于延迟关键型实时使用基于自旋的锁。
-
对于高负载的非实时使用 parking_lot 组件。
默认锁定策略
// For the implicit <T>
let (tx, rx) = rtsc::channel_bounded!(10);
tx.send(42).unwrap();
// For the explicit <T>
use rtsc::channel;
// The `Bounded` structure is used as a workaround to specify the default
// Mutex/Condvar, being destructuring to the sender and the receiver.
let channel::Bounded { tx, rx } = channel::Bounded::<i32>::new(10);
在 Linux 上,该 crate 使用内置的优先级继承 pi::Mutex
实现,并将其重新导出为 locking
模块。
在其他平台上,所有组件都使用来自locking
。
自定义锁定策略
crate 组件提供了指定第三方 Mutex/Condvar 实现的 API。
// Forcibly use the parking_lot_rt Mutex/Condvar
let (tx, rx) = rtsc::channel::bounded::<i32,
parking_lot_rt::RawMutex, parking_lot_rt::Condvar>(1);
注意:异步通道仅使用 parking_lot_rt
锁定。
支持的互斥锁
所有实现了来自 lock_api crate 的 locking_api::RawMutex
trait 的互斥锁。
支持的条件变量
对于条件变量,必须实现 condvar_api::RawCondvar
trait。
此 trait 对以下内容自动实现
-
提供的内置锁
-
parking_lot::Condvar
(需要parking_lot
功能)
参考
RTSC 是 RoboPLC 项目的一部分。
依赖项
~3.5–9MB
~91K SLoC