我需要将资源分配给线程数,所以我使用信号量来处理所有这些,然后我意识到在进程间锁定资源的情况下使用信号量。我用谷歌搜索并找到了进程内信号量的一些实现并使用了该类,但它有一些奇怪的错误。
现在我的问题是我应该使用点网信号量类吗?无论如何我可以在进程中创建信号量并降低进程间的成本(内部管理)
我需要将资源分配给线程数,所以我使用信号量来处理所有这些,然后我意识到在进程间锁定资源的情况下使用信号量。我用谷歌搜索并找到了进程内信号量的一些实现并使用了该类,但它有一些奇怪的错误。
现在我的问题是我应该使用点网信号量类吗?无论如何我可以在进程中创建信号量并降低进程间的成本(内部管理)
Semaphore 类有许多构造函数。一些重载允许您指定名称。命名 Semaphore 实例使其成为可供其他进程使用的系统级信号量。如果您不需要,只需使用其他构造函数之一。尽管如此,IIRC 仍然有一个与该实例关联的内核对象。
如果您不是线程专家,我建议您坚持使用已知的工作类。所以是的,如果它适用于您的任务,请坚持使用 .NET 信号量类。
除非您有正当理由(例如分析器结果),否则不要对您的代码进行微优化。
也就是说,如果您的代码模式类似于生产者-消费者模式,那么使用 Monitor 类的有效解决方案可以避免使用 OS 同步对象。
从 .NET 4.0 开始,如果您不需要跨进程边界等待,则可以使用 SemaphoreSlim 类。
这是关于在两者之间进行选择的另一个讨论。