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

c# – 使用lock有什么含义(typeof(string))

发布时间:2020-12-15 04:15:24 所属栏目:百科 来源:网络整理
导读:我们在工作中就锁定以及究竟发生了什么进行了讨论.触发此讨论的代码是: string name = (string)context.Cache[key]; if (String.IsNullOrEmpty(name)){ lock (typeof(string)){ name = (string)context.Cache[key]; //.. other code to get the name and th
我们在工作中就锁定以及究竟发生了什么进行了讨论.触发此讨论的代码是:
string name = (string)context.Cache[key];

        if (String.IsNullOrEmpty(name)){

            lock (typeof(string)){
                name = (string)context.Cache[key];
                //.. other code to get the name and then store in the cache
            }
        }

我认为这是直截了当的:在缓存中查找一个值,如果它不在那里则获取一个锁,以便在代码获取名称并将其存储在缓存中时没有其他任何中断.

我们的讨论集中在(typeof(string))是否是最好的做事方式,以及究竟是做什么的.

我的问题是lock(typeof(string))究竟做了什么?它是否创建了一个用于锁定的本地字符串,或者它是否创建了具有更大范围的内容,因此可能不安全.

MSDN lock statement

解决方法

如果您锁定类型,则表示您基于该类型的实例具有相互访问权限排除.这意味着应用程序中的两个线程会无意中阻塞对方或导致无法预料的死锁.

请记住,typeof(someType)只返回一个Type实例.

将对象专用于锁定复杂进程通常是最佳做法,例如在类中声明只读对象.如果锁只需要访问一个私有变量,比如一个集合,那么锁定该集合就可以了.

(编辑:李大同)

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

    推荐文章
      热点阅读