锁定 Dictionary.Count

Thy*_*ine 5 c# locking

在访问集合的简单属性时,锁定是否有任何好处或危害,特别是.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,它是一个由它维护的整数,因此应该始终是原子操作

usr*_*usr 5

是的,在并发写入的情况下需要锁定,因为文档Dictionary不保证这将是安全的。你不能对它的内部结构做任何假设。

这条规则的例外需要极端情况。

TL;DR:仅依靠记录在案的行为,否则您最终会发现自己处于一个受伤的世界。