对于 C 语言的实时 DSP 程序,我需要类似 Go 风格的通道来在线程之间进行通信:
我想知道使用好的旧流是否是一个好主意。如果没有,是否有好的实践和/或库来获得尽可能接近 Go 通道的东西?
Go 同时支持缓冲和无缓冲通道;无缓冲通道实际上对应于两个线程之间的“会合点”,它允许线程直接交换数据,即不需要额外的缓冲区;线程会合可以实现,例如有屏障(参见例如 https://en.wikipedia.org/wiki/Barrier_(computer_science))。您的小型固定大小令牌似乎非常适合无缓冲方法。
相比之下,缓冲通道可以实现为线程安全队列,正如已经提到的。在 FreeRTOS 中,您可以使用 xQueueCreate 创建这样一个队列。
我最近实现了一个 C 库,它支持基于 Pthreads 的缓冲和无缓冲 Go 通道的语义(请参阅 https://github.com/rochus-keller/CspChan)。您没有提供有关您的实施环境的信息。不过,将该库移植到 FreeRTOS(或类似的低级操作系统)看起来是可行的。