c - 延迟两个线程之间的通信

标签 c linux multithreading pthreads communication

我有两个线程(我在 GNU/Linux 上使用 pthreads)。现在他们正在使用全局变量共享信息(我知道,这并不好)。在每个循环结束时,他们必须将 5 个变量 (doubles) 的值发送到另一个线程。 我想在他们的沟通 channel 中引入固定时间延迟,

thread1 (1kHz) <---> 10ms <---> thread2 (1kHz)

我在想,在每个周期,我可以创建一个读取值的线程,休眠 10 毫秒,然后将其转发给另一个线程,然后结束。 这将使系统在每个周期创建 2 个线程,一个用于通信 channel 的每个方向(每毫秒 2 个线程)。

是否有任何其他智能方式来模拟通信延迟?

更新:我不想同步线程的通信,而是在它们之间添加延迟。 如果线程 1 在时间 1 秒写了一些东西,另一个线程应该只能在时间 1 秒 + 10 毫秒时读取它。

最佳答案

这听起来不像是性能问题,所以让它变得简单。不需要复杂的数据结构、额外的线程等。

为您的数据创建一个结构,向其添加一个时间戳字段。

创建一个数组以容纳至少 10 个结构。去100是安全的。不会在这里使用大量内存,所以谁在乎。哎呀,只要它需要增长,你就可以 malloc 它。

每个线程都有一个这样的数组,以及数组中的项目数。

当线程准备发送数据时,做两件事:

  1. 检查数组中第一项的时间戳,如果是旧的 足够将该数据发送到另一个线程。发送后,递减 count 和 memmove 数组中的其余项目向下一个 缺口。
  2. 将当前/新数据添加到数组的末尾 当前时间戳并增加计数。

重复其他线程。

关于c - 延迟两个线程之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10689499/

相关文章:

c - Bitscan前向测试

javascript - emscripten 在 C 中读取 javascript arrayBuffer

为 Labview 创建 DLL

java - 当其他线程设置条件时,为什么 Java 中的 empty while 不会中断?

c - 使用 gdb 访问命令行参数

linux - 以编程方式读取linux内核参数

c++ - 在 linux 上运行的 c++ 程序中为类编写测试用例

linux - GDB 反汇编动态加载的代码

c++ - boost::condition_variable::notify_one() 的行为

java - 这个线程安全吗