如何解决MacOS上的双工命名管道-竞争条件
背景
基本上,我发现了有关命名管道的文章:
Inter Process Communication - Named Pipes - Tutorialspoint
我在MacOS(Catalina)上构建了这些示例,乍一看还不错。
问题
基于fifoserver_twoway.c
和fifoclient_twoway.c
的示例,我已经编写了自己的代码,但没有用。从一个进程发送的数据有时会被另一进程读取,但是更多时候同一进程正在读取自己的数据。
在乞讨时,我虽然我的代码有错误(我讨厌“全部在主代码中”),但是后来我意识到我的代码是自动化的,因此竞争条件开始了。所以我确实对原始示例和相同的问题进行了更快的数据输入出现。
实际上,当我使用此输入文件时:
123456
abcdefgh
FooBar
end
并将其提供给客户的stdin
:
./fifoclient_twoway <testData.txt
客户端读取它发送的所有数据,除了end
结束两个进程的正确性(客户端在发送end
之后不尝试读取数据)。因此,基本上教程中的代码是错误的。
问题
是否有一些简单的方法来防止读取同一进程已写入的数据,并允许其他进程读取数据并发送响应(解决竞争条件),而无需将此管道分成两个单向管道?
旁注
我在Windows上没有发现双工命名管道的相同问题
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。