gpt4 book ai didi

c++ - 多速率线程

转载 作者:行者123 更新时间:2023-11-28 06:02:20 24 4
gpt4 key购买 nike

我最近遇到了一个需求,其中需要多线程应用程序,其线程以不同的速率运行。那么问题就变成了,因为我还在学习多线程:给出了一个场景来透视事物:

假设第一个线程“实时”以 100 Hz 运行 第二次以 10 Hz 运行

并说第一个线程向第二个线程提供数据“myData”。

  • 如何将 myData 提供给第二个线程,通常的做法是只读取第一个线程可用的任何内容,或者需要进行某种抽取以降低速率。
  • myData 是否需要是某种具有锁定机制的单例。虽然 myData 不共享,但由第一个线程更新并在第二个线程中使用。
  • 相反的情况如何,当一个线程中使用的数据需要在另一个线程中以更高的速率使用时。

最佳答案

How is myData going to be provided to the 2nd thread

一种常见的方法是提供一个 FIFO 队列——这可以是一个 std::dequeue 或一个链表,或其他任何东西——并让生产者线程将数据项插入队列的一端,同时消费者线程弹出队列另一端的数据项。务必序列化对 FIFO 队列的所有访问(使用互斥锁或类似的锁定机制),以避免竞争条件。

或者,您可以拥有一个共享数据对象(本质上是一个长度为 1 的队列)而不是队列,并让您​​的生产者线程在每次生成新数据时覆盖该对象。这可以在消费者线程看到生成的每条数据并不重要,而是它看到最新数据才重要的情况下完成。不过,您仍然需要进行锁定,以避免消费者线程在生产者线程正在写入数据对象的同时从数据对象读取的风险。

or does there need to be some kind of decimation to reduce the rate.

不需要任何抽取——第二个线程只要醒来就可以读取尽可能多的数据。

Does the myData need to be some kind of Singleton with locking mechanism.

Singleton 不是必需的(尽管这样做是可能的)。锁定机制是必要的,除非你有某种无锁同步机制(如果你问这个级别的问题,你没有,你也不想尝试获得一个 - 保持现在的事情很简单!)

How about the opposite case, when the data used in one thread need to be used at higher rate in a different thread.

这是一样的——如果您使用适当的线程间通信机制,线程唤醒的速率并不重要,因为通信机制将做正确的事情,而不管线程间唤醒的时间和频率如何。线程唤醒。

关于c++ - 多速率线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33006045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com