2012年4月23日 星期一

[C#] lock 的用法


參考文章:

Object thisLock=new Object();
lock(thisLock)
{
//Criticalcodesection.
}


lock關鍵字會在區塊開始執行時呼叫Enter,並在區塊結束時呼叫Exit
一般而言,請避免鎖定public型別或程式碼無法控制的執行個體。
有三種常見的建構,分別為 lock(this)lock(typeof(MyType))lock("myLock"),違反這項方針:

·             lock(this)在可公開存取執行個體的情況下,會是問題所在。
·             lock(typeof(MyType))在可公開存取MyType的情況下,會是問題所在。
·             lock("myLock")會是問題所在,因為使用相同字串的處理序中若有任何其他程式碼,將會共用相同的鎖定。

最佳作法是定義要鎖定的private物件,或者定義privatestatic物件變數保護所有執行個體通用的資料。

PS. 上述三種情況,有可能會造成Deadlock

沒有留言:

張貼留言