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