为什么lock(this)
在多线程C#
Microsoft的文档建议不要使用lock(this)
保护对象访问。 让我们探讨该建议背后的原因。
使用lock(this)
>的关键风险:
>不受控制的锁定:公共访问的对象均值>任何代码都可以在上获取锁定。这为不可预测的同步问题打开了大门,使多线程代码更难正确设计和调试。
this
使用私有字段和专用锁定对象通常是首选。这种方法强制执行访问控制,并保持内部锁定机制,并保留封装。 公开锁定实现,损害了这个至关重要的设计原则。
lock(this)
>以某种方式使对象只能读取。这是不正确的。该对象仅充当锁定>键。 如果另一个线程固定锁,则随后的尝试将阻塞,但对象本身仍然可修改。lock
lock(this)
锁定不变的类型:切勿锁定像字符串这样的不变类型。 这些通常在整个应用程序中共享,导致死锁或意外行为。 使用一个私有的,可变的对象(例如专用
说明性示例:object
这个示例突出显示了问题。 将锁定在
>上的锁定时,另一个线程仍然可以同时修改,证明
以上是为什么在多线程c#中使用`锁(this)`?的详细内容。更多信息请关注PHP中文网其他相关文章!