我有两个线程(我在 GNU/Linux 上使用 pthreads
)。现在他们正在使用全局变量共享信息(我知道,这并不好)。在每个循环结束时,他们必须将 5 个变量 (doubles
) 的值发送到另一个线程。
我想在他们的沟通 channel 中引入固定时间延迟,
即
thread1 (1kHz) <---> 10ms <---> thread2 (1kHz)
我在想,在每个周期,我可以创建一个读取值的线程,休眠 10 毫秒,然后将其转发给另一个线程,然后结束。 这将使系统在每个周期创建 2 个线程,一个用于通信 channel 的每个方向(每毫秒 2 个线程)。
是否有任何其他智能方式来模拟通信延迟?
更新:我不想同步线程的通信,而是在它们之间添加延迟。 如果线程 1 在时间 1 秒写了一些东西,另一个线程应该只能在时间 1 秒 + 10 毫秒时读取它。
最佳答案
这听起来不像是性能问题,所以让它变得简单。不需要复杂的数据结构、额外的线程等。
为您的数据创建一个结构,向其添加一个时间戳字段。
创建一个数组以容纳至少 10 个结构。去100是安全的。不会在这里使用大量内存,所以谁在乎。哎呀,只要它需要增长,你就可以 malloc 它。
每个线程都有一个这样的数组,以及数组中的项目数。
当线程准备发送数据时,做两件事:
- 检查数组中第一项的时间戳,如果是旧的 足够将该数据发送到另一个线程。发送后,递减 count 和 memmove 数组中的其余项目向下一个 缺口。
- 将当前/新数据添加到数组的末尾 当前时间戳并增加计数。
重复其他线程。
关于c - 延迟两个线程之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10689499/