我想使用单个处理器在c ++程序中制作两个pthread。 Thread1将无限运行,但需要每隔5微秒中断一次,以允许thread2在切换回thread1之前执行while循环的一次迭代。我知道如何制作pthreads等等,但我无法弄清楚如何根据计时器进行线程之间的切换。有没有办法做到这一点?
答案 0 :(得分:2)
如果您不希望两个线程同时运行,那么您不应该使用两个线程。第二个线程可以用作每个5微秒从第一个线程调用的函数。
答案 1 :(得分:2)
您想要的问题是中断的时间间隔的比例。通常的操作系统不会经常切换线程,正常速率以毫秒为单位。要达到5微秒的间隔,你需要
我不熟悉RtOS或驱动程序。我怀疑你可能需要这个非常专业的解决方案。至于第二种方法..
你仍然可以使用pthreads但是确保thread1至少每5微秒调用一次OS,以便OS有机会将其重新安排到thread2。并且您需要为thread2分配更高的优先级或设置不同的调度策略,如Round-Robin而不是Fair Scheduling:see here。
但是,这种线程方法将遭受上下文切换的巨大开销:假设roughly 1300 ns per context switch,并且每5微秒需要2个交换机,则导致<<> 50%的开销时间 !
另一种方法可以是用户级线程(coroutines / fibers)调度。它具有明显更少的开销,并使thread2能够被编写为循环,它定期休眠而不是完全退出其功能。无论如何,它还需要thread1来处理检查点,其速率足以允许每5微秒进行一次切换。
最后,如果thread2可以很容易地实现为具有状态的函数以便处理循环,那么从开销和复杂性观点来看,它是最佳选择。