日期:2014-05-18  浏览次数:21208 次

lock(this),lock(object),lock("string")区别?
其中object就是private static readonly object object = new object();
第三个是个字符串

这三者用于处理并发时,有何区别?

------解决方案--------------------
没啥区别,要区别的是参数的作用域,参数需要一个全局的唯一变量,否则lock很容易失去意义
------解决方案--------------------
自己去MSDN查lock的说明

http://msdn.microsoft.com/zh-cn/library/c5kehkcz.aspx
------解决方案--------------------
1.lock不能锁定空值某一对象可以指向Null,但Null是不需要被释放的。
2.lock不能锁定string类型,虽然它也是引用类型的。因为字符串类型被CLR“暂留”

这意味着整个程序中任何给定字符串都只有一个实例,就是这同一个对象表示了所有运行的应用程序域的所有线程中的该文本。因此,只要在应用程序进程中的任何位置处具有相同内容的字符串上放置了锁,就将锁定应用程序中该字符串的所有实例。因此,最好锁定不会被暂留的私有或受保护成员。
3.lock锁定的对象是一个程序块的内存边界
4.值类型不能被lock,因为前文标红字的“对象被释放”,值类型不是引用类型的

5.lock就避免锁定public 类型或不受程序控制的对象。


------解决方案--------------------
lock(this) 如果当前类型是LockTest
那么 l1= new LockTest(),l2 = new LockTest(); l1和l2同时进行操作的时候,这个所没有意义。
lock(static object) 
l1和l2同时操作时 有锁的功能。

lock(string) 具有上述两种可能。


拿锁和获取属性类似:看这个锁(属性)的作用域,其他的另作考虑