我需要将资源分配给线程数,因此我使用信号量来处理所有这些,然后我意识到信号量用于进程间锁定资源。我用Google搜索并发现了一些In-Process Semaphore的实现并使用了该类,但它有一些奇怪的错误。
现在我的问题是我应该使用Dot Net Semaphore Class吗?无论如何我可以创建进程信号量并降低进程间的成本(内部管理)
答案 0 :(得分:4)
Semaphore类有许多构造函数。某些重载允许您指定名称。命名Semaphore实例使其成为其他进程可用的系统级信号量。如果您不需要,只需使用其他构造函数之一。 IIRC仍然存在与该实例关联的内核对象。
答案 1 :(得分:3)
如果你不是线程大师,我建议你坚持使用已知的工作类。所以是的,如果它适用于您的任务,请坚持使用.NET信号量类。
除非您有正当理由这样做(例如,探查器结果),否则不要对您的代码进行微观优化。
也就是说,如果您的代码模式类似于生产者 - 消费者模式,那么efficient solutions using the Monitor class可以避免使用OS同步对象。
答案 2 :(得分:1)
从.NET 4.0开始,如果您不需要跨进程边界等待,则可以使用SemaphoreSlim类。
Here是关于在两者之间进行选择的另一个讨论。