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中文網其他相關文章!