在某些場景中,我對鎖定的概念有點困惑。讓我來解釋一下,假設我有以下幾點:C#多線程 - 鎖定
private readonly MyClass myObj;
private void Go(object state)
{
// call an instance member of myObj, but does it need to be locked?
myObj.SomeMethod(state);
}
所以現在的問題是不MyObj中需要調用的someMethod時被鎖定?它是隻讀的,但是由於多個線程可以調用myObj的實例方法SomeMethod以及不同的狀態,這不會引起問題?
謝謝。
不是用'SomeMethod'來鎖定更多的關注,它是後續資源去'去'? – Smudge202
@ Smudge202:這取決於 - 如果'MyClass'不聲稱是線程安全的,但包含'Go'的類確實,那麼鎖定應該在'Go'中。如果'MyClass.SomeMethod'是爲了線程安全的(爲了這個術語的適當含義......),那麼'Go'不需要鎖定。 –
夠公平的。儘管如此,我仍然發現所有可怕的倒退,代表'SomeMethod'的'Go'方法中的資源被鎖定,這並不是線程安全的。個人喜好我猜。我也非常喜歡非線程安全的方式,並儘可能地確保線程的公寓/獨立實例。簡單得多。 – Smudge202