首页 >后端开发 >C++ >为什么在多线程c#中使用`锁(this)`?

为什么在多线程c#中使用`锁(this)`?

Linda Hamilton
Linda Hamilton原创
2025-01-31 06:11:09331浏览

Why is using `lock(this)` in multithreaded C# discouraged?

为什么lock(this)在多线程C#

中是有问题的 如果该对象可公开访问,则

Microsoft的文档建议不要使用lock(this)保护对象访问。 让我们探讨该建议背后的原因。

>

使用lock(this)>的关键风险:

>
  1. >不受控制的锁定:公共访问的对象均值>任何代码都可以在上获取锁定。这为不可预测的同步问题打开了大门,使多线程代码更难正确设计和调试。 this

  2. 封装违规:

    使用私有字段和专用锁定对象通常是首选。这种方法强制执行访问控制,并保持内部锁定机制,并保留封装。 公开锁定实现,损害了这个至关重要的设计原则。 lock(this)

  3. >
  4. 的行为的误解:一个常见的误解是

    >以某种方式使对象只能读取。这是不正确的。该对象仅充当锁定>键。 如果另一个线程固定锁,则随后的尝试将阻塞,但对象本身仍然可修改。> lock lock(this) 锁定不变的类型:切勿锁定像字符串这样的不变类型。 这些通常在整个应用程序中共享,导致死锁或意外行为。 使用一个私有的,可变的对象(例如专用

    实例)进行锁定。
  5. >
  6. 说明性示例:object

  7. 考虑此C#代码:

这个示例突出显示了问题。 将锁定在

>上的锁定时,另一个线程仍然可以同时修改

,证明并不能固有地阻止修改。 缺乏保证的保护是警告的核心原因。

以上是为什么在多线程c#中使用`锁(this)`?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn