gpt4 book ai didi

c# - ReaderWriterLockSlim 是正确的选择吗?

转载 作者:行者123 更新时间:2023-11-30 14:18:01 26 4
gpt4 key购买 nike

我正在为在 Windows Azure 中运行的应用程序编写全局错误处理程序/记录器。当应用程序中发生错误时,会执行许多需要自动发生的操作。我需要防止在前一个错误完成之前记录错误。同时,我希望根据需要读取日志。

我最初的想法是使用 Monitor/lock 并仅锁定错误写入。这样读取就不会受到抑制。我想知道 ReaderWriterLockSlim 是否更合适。我不能说我真正理解一种方法与另一种方法之间的值(value)。

我是否应该创建一个 ReaderWriterLockSlim 并执行类似下面的操作(读取被包裹在 EnterReadLock 中)...

public static void LogError(Exception exception)
{
_lock.EnterWriteLock();

...

_lock.ExitWriteLock();
}

或者我只是简单地做类似下面的事情,只锁定写入部分:

public static void LogError(Exception exception)
{
lock (someStaticLock)
{
...
}
}

任何想法/建议将不胜感激。

最佳答案

好的,这完全取决于预期的资源争用方式。以下是我根据要锁定的内容和锁定的程度做出的简单决定。

ReaderWriterLockSlim 是使用自旋锁实现的,因此如果您有长时间锁定资源(在本例中为写入文本),由于等待线程自旋,会导致性能下降。也就是说,它在以下情况下非常有用。

  • 如果您有很多锁,并且每个锁的粒度都比较细(针对非常小的代码段的锁),那么 ReaderWriterLockSlim 或(自旋锁)。
  • 预期的线程数或争用率较高 如果锁定是细粒度的,则自旋锁是有意义的。

Lock 或 Monitor 最适合当您的争用是粗粒度的并且您知道争用或锁的数量较低时。

ReaderWriterLockSlim 比 ReaderWriterLock 至少快 3-5 倍。

关于c# - ReaderWriterLockSlim 是正确的选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5188475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com