我有两个进程通过单个命名管道以双工和二进制模式(不是消息)进行通信。每个进程都有两个线程,一个写入管道,一个从管道读取。管道两端的读写是不同步的,所以我读写是真正并行的。每个发件人为其邮件编号。所有代码都是用 C# 编写的。我使用 interop 和 Win32 来创建和连接管道。
我在 MSTest 中有一个单元测试,它启动服务器和客户端并产生两个线程,一个发送消息服务器-> 客户端,一个从客户端-> 服务器发送。
问题:很少,一些真正独特的消息被两次或更频繁地接收。
问题:Windows 上的双工管道可以像上面描述的那样处理多线程吗?还是我需要在管道的一端同步读/写?
更新 与同步 IO 一起使用的全双工管道在两个方向上工作,但不能同时工作。管道一端的并发读/写肯定会产生错误的结果。似乎对 WriteFile 的调用唤醒了阻塞的 ReadFile 线程。我的解决方法是使用两个单向管道。这也被推荐在其他地方。也许它适用于重叠的 IO,我没有尝试。