2010-02-01 96 views
3

我在共享系统上有一个消息队列。该队列由2个在其他2台机器上运行的进程访问。我需要通过2个进程来控制对这个队列的访问。所以我需要一个“网络互斥”。我怎样才能做到这一点?跨网络互斥 - C#.NET

我不认为这是C#.NET开箱即用的支持,但如果我错过了非常明显的东西,请指点我正确的方向。这个问题之前已经提出过,但解决方案建议涉及一个数据库。我没有任何问题的数据库。

How To Mutex Across a Network?

+0

你是否试图避免两个进程出列和处理相同的消息或其他东西? – Paolo 2010-02-01 11:18:15

+0

我不知道MSMQ是否可以满足您的要求,但也许值得一看。 – AaronLS 2010-02-01 11:21:14

+0

@Paolo:是的!从头脑的任何解决方案? @aaronls:我正在使用MSMQ ...不知道它是否提供了一些内置的锁定设施,我可以使用? – atlantis 2010-02-01 11:48:21

回答

4

您需要第三个过程,它实际拥有的排队项目。两名工人分别向第三个过程询问下一个项目,而这是第三个过程,它监视访问并充当锁。

+0

这似乎是要走的路,但我们已经有很多MSI在系统中,我想避免再添加一个。谢谢! – atlantis 2010-02-01 11:47:21

+0

寻找Win本身直接支持的东西。 – atlantis 2010-02-01 11:52:37

1

使用MSMQ或其他排队系统设计在整个网络中使用。

Win32没有像muxtex这样的跨机同步原语,您可能可以从文件锁定中构建某些东西,但您只是重新发明了MSMQ。

+0

我想知道是否有一些东西可以传递给OpenNamedMutex(),这会导致它在远程计算机上打开一个命名互斥体,以照顾底层连接和东西,当然假设需要访问权限。 像这样的东西可以解决我的问题。任何想法,如果MSMQ有我可以使用的东西?(@aaronls'上面的评论) – atlantis 2010-02-01 11:51:14

+0

@atlantis:没有什么可以传递的,Win32 mutxes仅限于当前会话(或可能 - 具有足够特权的用户 - 整台机器)。没有更大范围的可能性。 – Richard 2010-02-01 14:57:20

+0

@atlantis:MSMQ支持可跨多台机器安全使用(包括分布式事务)的(序列化)对象的队列。它直接受.NET支持('system.messaging'命名空间)。 – Richard 2010-02-01 14:58:41