9 个版本
0.2.6 | 2024年3月8日 |
---|---|
0.2.5 | 2024年2月21日 |
0.2.1 | 2023年6月4日 |
0.2.0 | 2023年1月17日 |
0.1.1 | 2021年2月22日 |
422 在 并发 中排名
每月 下载 38 次
21KB
393 行
Atomx
此 crate 是实验性的!请勿在生产环境中使用。
信号
它提供了一个称为 Signal 的线程间通信通道。一个 Signal
总有一个单个 Source
和一个或多个 Sink
(单生产者多消费者,SPMC)。信号的行为与已知通道不同,因为没有 fifo 类似的行为。值不会被 sink 取出。无论读取多少次,它们都保持不变。Signal 数据的唯一变化方式是通过 Source。这解耦了源和接收器的频率域。如果需要同步的 Signal 行为,其中所有接收器都需要确认信号值的变化,则有 signal::sync 模块。它提供了与默认实现相同的接口并添加了同步功能。由于它被认为是异常需求,因此它带有更多开销。
这种行为可能适用于以下系统:子系统以给定频率采样其源并处理数据,源信号也可能在不同的频率下运行。或者,如果已知源数据在采样时是最新的。同步信号可以用于为多个子系统提供触发信号。
底层机制受到页面翻倍的启发,其中一个显示缓冲区正在显示,而另一个可以修改。使用危险指针来保护引用接收器/读取缓冲区的原子指针。
感谢 jonhoo。Signal 模块受到他的 streams 的启发,并由他的危险指针实现(jonhoo/haphazard)提供支持。
许可证
Atomx 在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发。有关详细信息,请参阅 LICENSE-APACHE 和 LICENSE-MIT。
贡献
打开 pull request 被假定表示同意这些许可条款。
依赖关系
~0.1–27MB
~333K SLoC