Skip to main content
 首页 » 编程设计

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

2024年01月22日29jpfss

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

在 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(); 
        } 
    } 
}