在计时器上的pthread之间切换

Switching between pthreads on a timer

本文关键字:之间 pthread 计时器      更新时间:2023-10-16

我想用一个处理器在c++程序中进行两次pthread。线程1将无休止地运行,但需要每5微秒中断一次,以允许线程2在切换回线程1之前执行while循环的一次迭代。我知道如何进行pthread之类的操作,但我不知道如何在基于计时器的线程之间进行切换。有办法做到这一点吗?

如果不希望两个线程同时运行,则不应该使用两个线程。第二线程可以用作每5微秒从第一线程调用的函数。

您想要的问题是中断的时间间隔的规模。通常的操作系统不会经常切换线程,正常的速率以毫秒为单位。要实现5微秒的间隔,您需要

  • 具有低成本高精度中断的实时操作系统,或者出于同样的目的编写自己的内核模块
  • 主动安排线程。也就是说,和Samer的建议差不多

我不熟悉RtOS或驱动程序。我怀疑你可能需要这个非常专业的解决方案。至于第二种方法。。

pthreads

您仍然可以使用pthreads进行操作,但请确保thread1至少每5微秒调用一次操作系统,以便操作系统有机会将其重新安排到thread2。您需要为thread2分配更高的优先级,或者设置不同的调度策略,如Round Robin而不是Fair scheduling:请参阅此处。

然而,这种线程方法将遭受上下文切换的巨大开销:假设每个上下文切换大约1300 ns,并且每5微秒需要2个交换机,这将导致大约50%的开销时间

共同出游

另一种方法可以是用户级线程(协同程序/光纤)调度。它显著减少了开销,并使thread2能够被写为周期性休眠的循环,而不是完全退出其功能。无论如何,它还需要thread1处理检查点,检查点的速率足以允许每5微秒进行一次切换。

函数

最后,如果thread2可以很容易地实现为具有状态的函数,以便处理循环,那么从开销和复杂性的角度来看,它是最好的选择。