请问一下channel在C语言里怎么实现

在学进程间通信时发现消息队列机制和Channel挺像的,
不过Channel操作起来很方便
输入数据: put!(chan,data)
取出数据: data = take!(chan)
我想C语言能不能通过消息队列实现一种写法差不多的Channel来简化进程间通信,不过能力有限,还请各位指点一下

这是一个无关话题。已重新分类。

你要问怎么实现 最简单的方法当然是在C里用libjulia啦

1 个赞

https://nanomsg.org/ 这样的?

您说的这个问题,大约是指在C语言中实现一个类似于Channel的消息通信机制。

我个人的想法是,如果想要一个在C语言中的实现,可以参考Go语言的Go Channel实现。一是因为Go语言与C语言的相近,代码只需稍作修改。二是Go Channel本身实现比较简单而又经过大规模应用的检验,因而可靠。

在这里简单地说一下实现方案,可以采用环形缓冲区(Ring Buffer) 实现。即一个环形的链表/数组,一个指针指向开头,一个指向结尾。插入删除自不必说。稍事封装,对简单应用来说大概可以达到Julia中的效果。

然而要想写得好有几点不得不考虑,就列在这里吧。

  1. 要处理并发访问的问题,不得不考虑锁等同步机制。如果是C语言,可能不得不依赖操作系统平台提供的机制和库,跨平台或成问题。
  2. channel本身能接受哪些数据类型?如果限制单一数据类型,是否要用宏等C语言中相对并不简便的元编程机制?如果接收任意数据类型,是否要用void指针类型擦除,然后考虑类型转换的问题?如果这样做了,涉及到指针,带来的内存管理问题是否也要考虑处理?

祝好!