lock(this)
的危险在C#MultinReading中
在C#中锁定>锁定在多线程应用程序中提出了重大挑战。 尽管MSDN文档强调了与公开访问实例相关的风险,但缺点超出了此简单方案。
this
复杂性和僵局风险
> 使用>将锁定机制公开到任何代码,并访问对象的实例。这减少了开发人员对同步的控制,增加了无法预测的僵局的可能性。 调试和解决并发问题变得更加困难。
封装违规lock(this)
>使用>直接违反了封装原则。 它将内部实施细节(锁定策略)暴露于外部组件。 一种优越的方法涉及使用私有字段锁定,保持锁定机制和对象的公共接口之间的明确分离。
lock(this)
>以某种方式使对象不可变。 这是不正确的。 该对象传递到仅用作锁定键。锁定它不会阻止访问或修改。>
说明性示例lock(this)
lock
运行此代码突出显示了
的问题:>
<code class="language-csharp">public class Person { public int Age { get; set; } public string Name { get; set; } public void LockThis() { lock (this) { Thread.Sleep(10000); // Simulates a long-running operation } } }</code>
僵局电位:lock(this)
>如果另一个线程尝试访问或修改
Person
字符串锁定问题:LockThis()
试图锁定person.Name
>以上是为什么在C#中使用`锁(this)`被认为有害了?的详细内容。更多信息请关注PHP中文网其他相关文章!