加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Lock for Dictionary.Count

发布时间:2020-12-16 01:51:46 所属栏目:百科 来源:网络整理
导读:在访问集合的简单属性时,锁定是否有任何好处或危害,特别是.Count? (这是可取的,不可取的,或者丝毫没关系?)(当然我需要将其锁定在任何写入或读取上) private Dictionarystring,bool database = new Dictionarystring,bool();private object databaseLock =
在访问集合的简单属性时,锁定是否有任何好处或危害,特别是.Count? (这是可取的,不可取的,或者丝毫没关系?)(当然我需要将其锁定在任何写入或读取上)

private Dictionary<string,bool> database = new Dictionary<string,bool>();
private object databaseLock = new object();
public int Count
{
    get
    {
        lock (databaseLock)
        {
            return database.Count;
        }
    }
}

就个人而言,我认为这可能是明智的,只是为了敲定约定,需要锁定对字典的访问,而不是出于任何实际原因[*].此外,在您访问的任何属性中,可能会有超过一个操作的操作.

[*]知道在C#中的(大多数)集合中,Count是一个由它维护的整数,所以应该始终是一个原子操作

解决方法

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

此规则的例外情况需要极端情况.

TL; DR:仅依靠记录在案的行为,否则你最终会陷入一个受伤的世界.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读