Mic*_*eth 98 c# multithreading semaphore
他们的公共界面看似相似.该文档指出SemaphoreSlim是一种轻量级替代方案,不使用Windows内核信号量. 该资源表明SemaphoreSlim速度更快.SemaphoreSlim在什么情况下对信号量更有意义,反之亦然?
And*_*ber 60
一个区别是SemaphoreSlim不允许命名的信号量,它可以是系统范围的.这意味着SemaphoreSlim不能用于跨进程同步.
MSDN文档还指出,当"等待时间预计非常短"时,应该使用SemSlim.这通常与这样的想法相吻合,即超薄版本在大多数折衷方面更轻巧.
小智 12
SemaphoreSlim基于SpinWait和Monitor,因此等待获取锁的线程正在燃烧CPU周期一段时间,希望在屈服于另一个线程之前获取锁.如果没有发生这种情况,那么一旦操作系统再次调度该线程,线程就会让系统切换上下文并再次尝试(通过刻录一些CPU周期).等待很长时间,这种模式可能会耗费大量的CPU周期.因此,这种实现的最佳情况是大部分时间没有等待时间,您几乎可以立即获得锁定.
Semaphore依赖于OS内核中的实现,因此每次获得锁时,都会花费相当多的CPU周期,但在此之后,线程只需休眠一段时间就可以获得锁定.
小智 8
关于"短时间"的争议:
至少SemaphoreSlim MSDN文档说明了这一点
SemaphoreSlim类是在单个应用程序中同步的推荐信号量.
在备注部分.同一部分还讲述了Semaphore和SemaphoreSlim之间的主要区别:
SemaphoreSlim是Semaphore类的轻量级替代品,它不使用Windows内核信号量.与Semaphore类不同,SemaphoreSlim类不支持命名系统信号量.您只能将其用作本地信号量.