我有两个线程(我在GNU / Linux上使用pthreads
)。现在他们正在使用全局变量共享信息(我知道,这并不好)。在每个周期结束时,他们必须将5个变量(doubles
)的值发送到另一个线程。
我想在他们的沟通渠道中引入一个固定的时间延迟,
即
thread1(1kHz)< ---> 10ms< ---> thread2(1kHz)
我在想,在每个周期,我都可以创建一个读取值的线程,休眠10ms,然后将其转发给另一个线程然后死掉。 这将使系统每个周期创建2个线程,一个用于通信通道的每个方向(每毫秒2个线程)。
是否还有其他模拟通信延迟的智能方法?
UPDATE :我不想同步线程的通信,但在它们之间添加延迟。 如果thread1在时间1s写入内容,则另一个线程应该只能在1s + 10ms时读取它。
答案 0 :(得分:1)
这听起来不像是性能问题,所以请简单一点。不需要复杂的数据结构,额外的线程等。
为您的数据创建一个结构,为其添加一个时间戳字段。
创建一个数组来保存至少10个结构。去100是安全的。这里不会使用大量内存,所以谁在乎。哎呀,只要它需要成长,你就可以把它当成它。
每个线程都有一个这样的数组,以及数组中的项目数。
当线程准备好发送数据时,请做两件事:
重复其他线程。
答案 1 :(得分:0)
为什么不使用互斥锁同步两个线程之间的通信?
当第一个线程需要写入数据时,它会获取互斥锁(因此另一个线程在第一次更新数据时无法读取数据),更新数据,然后释放互斥锁。另一个线程在读取数据时执行类似的获取/释放方法。
答案 2 :(得分:0)
我无法从问题中看出作者和读者线程之间的通信是否需要可靠(如:作者线程发送的所有消息都保证读者线程以正确的顺序看到)。如果是这样,并且如果你使用单个全局结构作为共享数据,那么你实际上是在实现一个缓冲区大小为1的FIFO。很容易让线程间通信错误,所以我建议你看一下喜欢glib的asynchronous queues。如果您需要从头开始实现自己的,那么查看该代码可能是一个很好的起点。
答案 3 :(得分:0)
为什么不在这里使用信号量?你可以让一个线程在信号量上等待,并让另一个线程在它完成它的关键部分时发出信号。