C:对于这个要求,有没有比FIFO队列实现更好的东西?

时间:2010-02-02 03:37:52

标签: c malloc message-queue buffering

在我的一个程序中,有多个客户端,每个客户端都有自己的缓冲区。在无限循环中,我检查是否有任何客户端有任何数据要写入磁盘。如果确实如此,那么我也这样做并继续。

现在,因为客户端写的数据并非真正在我的控制中(某些计算的结果),所以我需要一个动态缓冲区。所以伪代码看起来像这样:

//If data is ready
//Append(client_id, line)

void Append(int client_id, char *line) {
   if(client_id.buffer == NULL) {
      buffer = (char*)malloc(BUFFERSIZE * sizeof(char));
      //Copy line into buffer
   } else {
      //Realloc the buffer if insufficient space and append this
      //line to the existing buffer
   }
}

或其他方法是使用简单的消息队列。我会继续向现有队列添加任何消息(字符串),然后将其读取。还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:3)

我可能没有完全理解您的架构,但我的理解是客户端通过传递它的ID和char *来调用您,并希望您将其写入磁盘。

您是否有必要复制原始缓冲区的原因?通过这样做,你可以将内存中的所有内容都放在内存中,并且有机会搞乱内存管理。如果可能,只需使用原始缓冲区。

这里发生了一些线程吗?如果这是所有单线程(从这个“服务器”代码的角度来看至少......一个线程来轮询和写入结果),你真的不需要FIFO,因为事情只会按你的轮询顺序发生客户端。如果有一个线程(或多个线程)来轮询客户端和一个单独的线程来写结果,那么FIFO是组织线程通信的好方法。