如何在C#中的两个进程之间使用共享队列?

时间:2011-02-28 12:53:34

标签: c#

我使用C#(MS visual studio 2010)来模拟生产者 - 消费者问题。我有2个exe程序,一个是Producer,另一个是Consumer。当它们执行时,Producer会将100个整数插入到队列中,而Consumer会以有序的方式将它们从该队列中删除。

我的问题是如何在两个进程之间使用共享队列,如果我必须使用进程间通信来传递一些小消息,我应该使用哪种机制(在剪贴板,COM,数据拷贝,DDE,文件中)映射,Mailslots,管道,RPC,Windows套接字)?

非常感谢!

3 个答案:

答案 0 :(得分:0)

我只想使用消息排队技术,例如MSMQ。仔细研究它是否符合您的要求。您可以在NServiceBus旁边使用它,它可以为您提供现成的完整发布/订阅模型,而且相对容易使用。

答案 1 :(得分:0)

我想到的另一个选择是在同一时间在多个读/写之间使用带有并发控制的数据库事务表。

答案 2 :(得分:0)

如果将两个进程转换为同一进程中的线程会更容易,因此它们可以直接共享内存。

除此之外,您可以使用内存映射I / O在进程和命名的互斥锁之间建立共享内存区域,以确保只有一个线程一次访问它。您必须在原始指针上编写自己的队列,这很容易出错。

即使在这种情况下,队列也可能无锁,但这很难实现,而且可能不值得。