lock关键字疑问,谁来解释下这段话?

victarary 2009-03-14 05:46:24
lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。
通常,应避免锁定 public 类型,否则实例将超出代码的控制范围。常见的结构 lock (this)、lock (typeof (MyType)) 和 lock ("myLock") 违反此准则:

如果实例可以被公共访问,将出现 lock (this) 问题。

如果 MyType 可以被公共访问,将出现 lock (typeof (MyType)) 问题。

由于进程中使用同一字符串的任何其他代码将共享同一个锁,所以出现 lock(“myLock”) 问题。
...全文
85 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
vrhero 2009-03-14
  • 打赏
  • 举报
回复
因为lock public对象可能导致死锁...

例如你在你的程序中lock了一个public对象,不幸的是另一个进程(即所谓不受控制的代码)也通过dll调用之类的方法lock了这个对象...结果就是你的线程在等待它释放此对象而它也在等待你释放此对象...更不幸的是如果这两个进程没有进程间同步机制(通常不会有),那么你的程序和这另一个程序都将无限等待下去...

至于lock字符串,比lock public对象更加危险...因为在.NET中有个很重要的概念叫做字符串驻留...意思是整个程序中任何给定字符串都只有一个实例,就是这同一个对象表示了所有运行的应用程序域的所有线程中的该文本...所以一旦你lock了一个字符串,就意味着lock了应用程序中该字符串的所有实例...

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧