在访问集合的简单属性时,锁定是否有任何好处或危害,特别是.Count?(这是可取的,不可取的,还是一点也不重要?)(当然我需要在任何写入或读取时锁定它)
private Dictionary<string, bool> database = new Dictionary<string, bool>();
private object databaseLock = new object();
public int Count
{
get
{
lock (databaseLock)
{
return database.Count;
}
}
}
Run Code Online (Sandbox Code Playgroud)
就我个人而言,我认为这可能是可取的,只需敲定需要锁定对字典的访问的约定,而不是出于任何实际原因[*]。还有可能在您访问的任何属性中进行比预期更多的操作。
[*] 知道在 C# 中的(大多数)集合中Count,它是一个由它维护的整数,因此应该始终是原子操作
是的,在并发写入的情况下需要锁定,因为文档Dictionary不保证这将是安全的。你不能对它的内部结构做任何假设。
这条规则的例外需要极端情况。
TL;DR:仅依靠记录在案的行为,否则您最终会发现自己处于一个受伤的世界。
| 归档时间: |
|
| 查看次数: |
1122 次 |
| 最近记录: |