Windows命名管道和多线程

时间:2013-03-13 17:04:40

标签: c# winapi named-pipes

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

我在MSTest中进行了单元测试,启动服务器和客户端并生成两个线程,一个发送消息server-> client和一个从client->服务器发送。

问题:很少,一些实际上独特的消息会被收到两次或更多次。

问题:Windows上的双工管道可以处理如上所述的多线程吗?或者我是否需要在管道的一端同步读/写?

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

0 个答案:

没有答案