加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:41:44 所属栏目:百科 来源:网络整理
导读:我正在为在 Windows Azure中运行的应用程序编写全局错误处理程序/记录器.当应用程序中发生错误时,将执行需要以原子方式执行的许多操作.我需要防止在上一个错误完成之前记录错误.同时,我希望根据需要读取日志. 我最初的想法是使用Monitor / lock并仅锁定错误
我正在为在 Windows Azure中运行的应用程序编写全局错误处理程序/记录器.当应用程序中发生错误时,将执行需要以原子方式执行的许多操作.我需要防止在上一个错误完成之前记录错误.同时,我希望根据需要读取日志.

我最初的想法是使用Monitor / lock并仅锁定错误写入.这样就完全没有抑制读取.我想知道ReaderWriterLockSlim是否更合适.我不能说我真正理解一种方法与另一种方法之间的价值.

我应该创建一个ReaderWriterLockSlim并执行以下操作(将读取包装在EnterReadLock中)…

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

    ...

    _lock.ExitWriteLock();
}

或者我只是执行以下操作,只锁定写入部分:

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

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

解决方法

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

ReaderWriterLockSlim是使用自旋锁实现的,因此如果你有很长的锁定资源(在这种情况下写文本),由于等待线程的旋转会导致性能更差.也就是说,它是以下情况下非常有用的工具.

>如果你有很多锁,并且每个锁都是更细粒度的(锁定非常小的代码片段),那么ReaderWriterLockSlim或(spinlock).
>预期的线程或争用的数量是高螺旋锁是有意义的,只要锁定是细粒度的.

锁定或监视器最适合您的争用是粗粒度并且您知道争用或锁定数量较少.

ReaderWriterLockSlim至少比ReaderWriterLock快3-5倍.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读