【问题标题】:When would it make sense to use a semaphore with a maxCount of 1?什么时候使用 maxCount 为 1 的信号量才有意义?
【发布时间】:2018-01-29 15:49:48
【问题描述】:

根据我的阅读,信号量旨在允许多个线程同时访问资源池。我还在阅读互斥锁一次只允许单个线程访问资源。我目前正在使用一些使用SemaphoreSlim 的代码来确保只有一个线程可以访问资源。

创建一个只有单个线程可以同时访问资源池的信号量有意义吗?在这种情况下,为什么不使用Mutex?或者(根据我正在阅读的内容)C# 中的类似构造 - lockMonitor?听起来互斥锁/锁/监视器更简单,而且潜在的误导性更小。

【问题讨论】:

  • SemaphoreSlimMutexrtfm 快得多。
  • 大多数时候你会想使用Monitor,但它有一个我现在不记得的限制,在另一个线程中离开。 SemaphoreSlim 没有。
  • @Sinatr 不是 Monitor 只是 lock?
  • @FCin, lock is implemented 使用Monitor
  • @Sinatr 这就是我要说的。 lockMonitor 的语法糖。

标签: c# multithreading semaphore


【解决方案1】:

如果单个线程被授予对资源的独占访问权限,我看不出为什么不使用Mutex 或任何其他用于独占锁的类型。

听起来互斥锁/锁/监视器更简单,更少 可能具有误导性。

在这种情况下,无法反驳。

【讨论】:

  • Monitor 锁定比 Mutex 快 50 倍。不使用互斥锁的好理由。
猜你喜欢
  • 2014-07-21
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
相关资源
最近更新 更多