為什麼lock(this)
在多線程C#
Microsoft的文檔建議不要使用lock(this)
保護對象訪問。 讓我們探討該建議背後的原因。
使用lock(this)
>的關鍵風險:
>不受控制的鎖定:公共訪問的對象均值>任何代碼都可以在上獲取鎖定。這為不可預測的同步問題打開了大門,使多線程代碼更難正確設計和調試。
this
使用私有字段和專用鎖定對象通常是首選。這種方法強制執行訪問控制,並保持內部鎖定機制,並保留封裝。 公開鎖定實現,損害了這個至關重要的設計原則。
lock(this)
>以某種方式使對像只能讀取。這是不正確的。該對象僅充當鎖定>鍵。 如果另一個線程固定鎖,則隨後的嘗試將阻塞,但對象本身仍然可修改。 lock
lock(this)
鎖定不變的類型:切勿鎖定像字符串這樣的不變類型。 這些通常在整個應用程序中共享,導致死鎖或意外行為。 使用私有的,可變的對象(例如專用
說明性示例:object
這個示例突出顯示了問題。 將鎖定在
>上的鎖定時,另一個線程仍然可以同時修改,證明
以上是為什麼在多線程c#中使用`鎖(this)`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!