【问题标题】:How to control the time offset of two threads in Linux?Linux中如何控制两个线程的时间偏移?
【发布时间】:2020-02-06 22:34:45
【问题描述】:

有什么方法可以创建两个SCHED_DEADLINE 线程,它们对全局循环具有特定的偏移量(相位)? 我正在尝试创建两个线程,两个线程的周期均为 10 毫秒,但它们的到达时间之间的偏移量为 5 毫秒。行为 应该看起来像这样,带有 |是到达时间,x 是实际开始时间,D 是绝对截止日期。两个线程都是独立的,因此不需要使用互斥锁等来同步它们。它们只需要时间偏移量。

线程 1 |-----xooooo---------D-------------|

线程 2 ------------------|-----xoooo--D-----

【问题讨论】:

  • "两个线程都有时序依赖,我需要将它们的偏移量同步到一个全局周期。两个线程是独立的,所以不需要同步它们。"?
  • 对不起,我的意思是,他们不共享资源,所以不需要互斥锁等。
  • 我不认为 Linux 可以为您提供对线程调度的那种级别的控制(如果您喜欢的话,Xenomai 可以)。但是,如果您的目标是让线程 1 的代码永远不会与线程 2 的代码同时运行,那么获得该行为的简单方法是摆脱线程 2 并仅在线程 1 中运行所有代码。
  • 创建两个线程,让它们都等待某个条件变量。唤醒后,立即运行线程 1.. 并让线程 2 休眠 5 毫秒.. 现在广播条件变量,以便两个线程都唤醒,一个线程与另一个线程相隔 5 毫秒.. 每个任务的长度应该为 10 毫秒保持在阶段..我猜..这是我能想象的最接近的..真正的问题是你为什么需要这个..
  • 两个信号量怎么样?每个线程在其循环的顶部获取其信号量。第三个线程(或计时器)每 5 毫秒交替释放两个信号量中的一个或另一个。

标签: c linux multithreading linux-rt


【解决方案1】:

也许您可以将timer_create()timer_settime() 一起使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 2016-06-28
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多