关于.Net中的信号量类

时间:2010-02-08 09:08:01

标签: .net multithreading semaphore

我需要将资源分配给线程数,因此我使用信号量来处理所有这些,然后我意识到信号量用于进程间锁定资源。我用Google搜索并发现了一些In-Process Semaphore的实现并使用了该类,但它有一些奇怪的错误。

现在我的问题是我应该使用Dot Net Semaphore Class吗?无论如何我可以创建进程信号量并降低进程间的成本(内部管理)

3 个答案:

答案 0 :(得分:4)

Semaphore类有许多构造函数。某些重载允许您指定名称。命名Semaphore实例使其成为其他进程可用的系统级信号量。如果您不需要,只需使用其他构造函数之一。 IIRC仍然存在与该实例关联的内核对象。

http://msdn.microsoft.com/en-us/library/e1hct27h.aspx

答案 1 :(得分:3)

如果你不是线程大师,我建议你坚持使用已知的工作类。所以是的,如果它适用于您的任务,请坚持使用.NET信号量类。

除非您有正当理由这样做(例如,探查器结果),否则不要对您的代码进行微观优化。

也就是说,如果您的代码模式类似于生产者 - 消费者模式,那么efficient solutions using the Monitor class可以避免使用OS同步对象。

答案 2 :(得分:1)

从.NET 4.0开始,如果您不需要跨进程边界等待,则可以使用SemaphoreSlim类。

Here是关于在两者之间进行选择的另一个讨论。