C# lock整理

C# lock整理 – Phoenix’s 技術學習記事- 點部落

之前使用lock來控制物件的存取發生了點問題,

後來查文章發現自己對lock有些不正確的認知,

整理一下lock的特性。

lock的目標並不是物件,而是程式碼區段,只有被lock包覆的程式區段才會有作用。
當使用lock(xxx)時,xxx可以想象成是一個識別號,所有相同識別號的lock程式區段,會受到lock的影響。
lock並不能使用struct來當作識別號。
當有資料要作存取的控制時,把這些要控制的資料包裝起來,然後提供方法來存取,並且用lock(this)來控制是不錯的作法。

當需要做多執行緒的資源存取控制的程式碼的時候,感覺是一個相當具挑戰性的工作,以自己的能力,把這項工作做好並不容易,之前所發生的問題,最後也並沒有得到解決,最後的處理方式是改用別的方法來避開,以當時的狀況而言,這是最佳的做法,不過,萬一必須得面對這狀況的時候,一定會花掉相當的時間去修改程式、測試程式,將這些整理起來,如果下次再遇到相同的問題,可以用來參考。

關於lock(this)會發生Deadlock的一些文章:

http://haacked.com/archive/2005/04/12/neverlockthis.aspx

http://haacked.com/archive/2006/08/08/threadingneverlockthisredux.aspx

建議的作法是在類別內宣告一個私有物件,然後以其作為lock的instance,

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

What is 10 + 4 ?
Please leave these two fields as-is:
IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)