MacOS上的双工命名管道-竞争条件

问题描述

背景

基本上,我发现了有关命名管道的文章:

Inter Process Communication - Named Pipes - Tutorialspoint

我在MacOS(Catalina)上构建了这些示例,乍一看还不错。

问题

基于fifoserver_twoway.cfifoclient_twoway.c的示例,我已经编写了自己的代码,但没有用。从一个进程发送的数据有时会被另一进程读取,但是更多时候同一进程正在读取自己的数据。

在乞讨时,我虽然我的代码有错误(我讨厌“全部在主代码中”),但是后来我意识到我的代码是自动化的,因此竞争条件开始了。所以我确实对原始示例和相同的问题进行了更快的数据输入出现。

实际上,当我使用此输入文件时:

123456
abcdefgh
FooBar
end

并将其提供给客户的stdin

./fifoclient_twoway <testData.txt

客户端读取它发送的所有数据,除了end结束两个进程的正确性(客户端在发送end之后不尝试读取数据)。因此,基本上教程中的代码是错误的。

问题

是否有一些简单的方法来防止读取同一进程已写入的数据,并允许其他进程读取数据并发送响应(解决竞争条件),而无需将此管道分成两个单向管道?

旁注

我在Windows上没有发现双工命名管道的相同问题

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...