C# Windows命名管道和多线程

C# Windows命名管道和多线程,c#,winapi,named-pipes,C#,Winapi,Named Pipes,我有两个进程,它们以双工和二进制模式(不是消息)通过单个命名管道进行通信。每个进程有两个线程,一个向管道写入,一个从管道读取。管道两端的读写不同步,所以我读写完全并行。每个发件人对其邮件进行编号。所有代码都是用C语言编写的。我使用interop和Win32创建和连接管道 我在MSTest中有一个单元测试,它启动一个服务器和客户机,并生成两个线程,一个发送消息服务器->客户机,另一个从客户机->服务器发送消息 问题:很少,一些实际上是唯一的消息会被接收两次或更多 问题:windows上的双工管道是

我有两个进程,它们以双工和二进制模式(不是消息)通过单个命名管道进行通信。每个进程有两个线程,一个向管道写入,一个从管道读取。管道两端的读写不同步,所以我读写完全并行。每个发件人对其邮件进行编号。所有代码都是用C语言编写的。我使用interop和Win32创建和连接管道

我在MSTest中有一个单元测试,它启动一个服务器和客户机,并生成两个线程,一个发送消息服务器->客户机,另一个从客户机->服务器发送消息

问题:很少,一些实际上是唯一的消息会被接收两次或更多

问题:windows上的双工管道是否可以像上面描述的那样处理多线程?还是需要同步管道一端的读/写操作

更新
与同步IO一起使用的全双工管道可以在两个方向上工作,但不能同时工作。管道一端的并发读/写操作肯定会产生错误的结果。对WriteFile的调用似乎唤醒了阻塞的ReadFile线程。我的解决方法是使用两个单向管道。其他地方也建议这样做。也许它可以与重叠IO一起工作,我没有尝试。

当你使用线程时,有很多方法可以让你大吃一惊。千万不要认为成千上万的程序员和5亿台机器使用的代码是问题的根源。这不是管道造成的问题,也不是我认为管道是问题所在。我在质疑我对API的理解。因此管道能够处理所描述的场景。在其他地方,我读到一个建议,使用两个单向管道而不是一个双工管道,我不知道为什么我应该这样做。你知道有
System.IO.pipes
对吗?哦,我想它只是在3.5版本中可用,而不是在客户端配置文件中。但它似乎被控制住了?