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

标签 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
   }
}

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

最佳答案

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

是否有理由必须复制原始缓冲区?通过这样做,您将所有内容都存储在内存中两次,并有机会搞乱内存管理。如果可能,只处理原始缓冲区。

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

关于C:对于这个要求,有没有比 FIFO 队列实现更好的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2181736/

相关文章:

c - 理解求和逻辑

c - 在另一个函数 : Segmentation fault (core dumped) 中使用 strcat

c - 怀疑malloc。 C (Linux)

c - 如何从服务器端发送消息队列以显示在客户端上?

java - 关于 MoM 和大消息的建议

timer - Timer 事件可以重入吗?

c - 尝试从文件中读取时无限循环

并发访问文件 linux

c - 将指针设置为 NULL 后双重释放

c - 逐条记录地从二进制文件中读取数据