c - 不完全是先进先出

标签 c linux unix queue fifo

我正在绞尽脑汁,但找不到解决方案。请考虑这种情况:

我有一些写入器想要将非阻塞“队列”写入本地网络上的另一台机器,并且有一个读取器将读取数据(如果没有写入器则为阻塞模式)并执行一些工作 A 然后返回一个小时并获取下一个数据。

所以场景是这样的:

  • 作家写
  • 作家写
  • 作家写
  • 作家写
  • 作家写
  • 读者阅读并做作业

    在读者忙碌的同时:

  • 作家写
  • 作家写
  • 作家写
  • 作家写
  • 作家写
  • 等...

我想我可以用一个 tcp 守护进程作为阅读器来做到这一点,但这意味着它会与 fork 同时运行,我希望阅读器一次处理一个,因为它会做一个 cpu 饥饿的工作.

我想过让一个 tcp 服务器获取请求,然后向 FIFO 发出信号,并让另一个守护进程从 FIFO 中读取,但它具有相同的局限性。

我的意思是当写入器写入时 FIFO 必须读取,并且我希望写入器的写入速度比读取器快很多倍。

数据库解决方案可以,但是 a) 它不是很快并且 b) 读者没有锁定..我不想用 sleep(x) 来实现它,这似乎不是一个好的编程技术.

有什么解决办法吗?

最佳答案

这听起来好像你有一个 producer-consumer problem .查看维基百科文章中的各种实现,看看其中是否满足您的需求。

关于c - 不完全是先进先出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1502577/

相关文章:

c - 将 [CONST][] 数组传递给 C 函数?

c - Malloc 实现 - 困惑

mysql - fatal error : Can't open and lock privilege tables: Table 'mysql.host' doesn't exist

regex - 正则表达式$$是什么意思?

bash - 从 12GB 文件中删除特定行

linux - 在 unix 中查找目录中文件数的最佳方法

c - 在不同的子目录中制作/构建多个内核模块

linux - 为什么 "lea..and..push"汇编代码经常出现在函数的开头?

c - 从/dev/random (c) 读取随机 double

c - 让子进程暂停,直到收到父进程的执行 execl 任务的信号