c# - 同一功能中的多个锁

标签 c# multithreading

我有一个函数是我的应用程序的主要瓶颈,因为它对线程之间共享的全局列表进行繁重的字符串比较。我的问题基本上是这样的:

在 1 个函数中多次锁定列表(称为 List gList)是不是很实用。然后稍后再次锁定它(在进行查找时基本上锁定,解锁准备好插入新项目然后再次锁定并添加新项目)。

当我成为一名分析员时,我没有看到任何迹象表明我为此付出了沉重的代价,但我可以在晚些时候或在野外编码时出现吗?有人在这方面有任何最佳实践或个人经验吗?

最佳答案

如何执行锁定?您可能想研究使用 ReaderWriterLockSlim ,如果情况并非如此。

这是一个简单的用法示例:

class SomeData
{
    private IList<string> _someStrings = new List<string>();
    private ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();

    public void Add(string text)
    {
        _lock.EnterWriteLock();            
        try
        {
            _someStrings.Add(text);
        }
        finally
        {
            _lock.ExitWriteLock();
        }

    }

    public bool Contains(string text)
    {
        _lock.EnterReadLock();
        try
        {
            return _someStrings.Contains(text);
        }
        finally
        {
            _lock.ExitReadLock();
        }
    }
}

关于c# - 同一功能中的多个锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1020159/

相关文章:

c# - 编写 Action Invoker - 如何根据用户选择调用方法?

c# - 为什么在没有 Finalizer 的情况下使用 GC.SuppressFinalize()?

c# - 面板滚动 c#

java - Concurrentlinkedqueue在多线程环境下未命中添加数据

multithreading - cfthread - 它可以运行多长时间?

Android:ListActivity 的正确线程

c# - 如何在 C# 中组合部分类对象?

C# 两个数字列表之间的逐元素差异

c++ - 等待时销毁 condition_variable

php - php/apache 中的多线程