如何在 Rust 中的线程之间传输最新状态而不使用互斥体

问题描述 投票:0回答:1

我正在开发一个 Rust 项目,其中有两个不同的线程用于特定目的。一个是实时线程,直接与硬件交互并保持严格的时序要求,而另一个是 Web 服务器线程,提供用于查询所述硬件当前状态的 API。

我需要一种机制,通过该机制Web服务器线程可以从实时线程获取硬件的最新状态。这里的挑战是避免使用互斥体,因为实时线程不能因为等待互斥体而被阻塞。

以下是我考虑过的一些解决方案及其相应的挑战:

  1. rwlock
    :但是如果任何读者拥有锁,则编写器线程(实时线程)将需要等待。
  2. 双缓冲:进行交换的线程需要对整个结构的可变引用,这会导致借用检查器问题。
  3. mpsc Channel
    :如果没有发出网络请求,通道可能会很快填满,导致内存浪费。
multithreading rust real-time robotics rust-tokio
1个回答
0
投票

您可以使用

arc-swap
板条箱,它提供
ArcSwap
类型(及相关类型):可以以无锁方式替换和加载的
Arc

© www.soinside.com 2019 - 2024. All rights reserved.