【发布时间】:2022-11-22 03:18:40
【问题描述】:
我参加聚会迟到了,但我最近了解到SemaphoreSlim:
我曾经使用 lock 进行同步锁定,使用 busy 布尔值进行异步锁定。现在我只使用SemaphoreSlim 来处理所有事情。
private SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1, 1);
private void DoStuff()
{
semaphoreSlim.Wait();
try
{
DoBlockingStuff();
}
finally
{
semaphoreSlim.Release();
}
}
对比
private object locker = new object();
private void DoStuff()
{
lock(locker)
{
DoBlockingStuff();
}
}
有没有我更喜欢使用lock而不是SemaphoreSlim的同步情况?如果有,它们是什么?
【问题讨论】:
-
@Evk 我认为 linked question 在两个方面与这个问题不同。这个问题是关于
SemaphoreSlim,而不是关于Semaphore。这个问题还询问了一般的优势,而不仅仅是性能。 -
@TheodorZoulias 没问题,尽管该问题中未被接受的答案在术语或性能方面将 SemaphoreSlim 与锁进行了比较。但如果有人认为它不是重复的——我不反对。
-
@Evk 是的,我看到 accepted answer 与这个问题相关。但那个答案在那里也是题外话。对于这些情况,quidance 有点含糊。
标签: c# multithreading thread-safety locking semaphore