首页 新闻 会员 周边

C# Lock 对象问题

0
悬赏园豆:5 [已解决问题] 解决于 2015-08-06 23:58

private static readonly object obj = new object();

Lock(obj)
{
  // do somethings.
}



private static object obj = new object();

Lock(obj)
{
  // do somethings.
}

有什么区别,有人说加readonly后,只要改变对象后,锁就能解除。就然都readonly了,怎么可能改变对象?我想问它们之前还有什么不同(它们确实不同),或者有什么的应用场景。

aswater的主页 aswater | 初学一级 | 园豆:193
提问于:2015-08-05 13:00
< >
分享
最佳答案
0

我感觉没有区别。只是readonly不能在初始化以外的地方修改。

如楼主的反射修改了没并没有什么卵用,一点不影响lock效果吧。(说明具体我也不清楚,等做个测试)

收获园豆:3
gw2010 | 小虾三级 |园豆:1487 | 2015-08-05 18:04

测试做完了两个的没有太大的区别,区别就是加了readonly改变值要复杂一些,其实两个改变值效果都一样。

gw2010 | 园豆:1487 (小虾三级) | 2015-08-06 09:27

@gw2010: 谢谢你的回答,当时的应用场景确实出现了不同,而且可以稳定的出现,加了readonly后问题解决了,我现在写测试想再次重现,却没出现,出现后在发帖。

aswater | 园豆:193 (初学一级) | 2015-08-06 23:55
其他回答(1)
0

readonly是可以修改的哦,反射就可以修改它的值

private static readonly object obj =1;

static void Main()

        {

            Console.WriteLine(data);

            mod();

            Console.WriteLine(data);

        }

        static void mod()

        {

         var fieldInfo = typeof(Program).GetField("obj ", BindingFlags.Static |BindingFlags.NonPublic);

         fieldInfo.SetValue(null, "哈哈哈哈");

         }

收获园豆:2
稳稳的河 | 园豆:4216 (老鸟四级) | 2015-08-05 16:20

谢谢指导,是我误会了,反射确实做到了,再一次见识到反射的强大。

支持(0) 反对(0) aswater | 园豆:193 (初学一级) | 2015-08-06 22:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册