Dot-Net

執行緒安全對象 - 靜態與否?

  • June 19, 2011

我最近在接受采訪,技術人員問我如何使應用程序執行緒安全。

好吧,在lock()正確解釋之後,他說將對象設為靜態並不是一個好主意。

private static readonly object _syncLock = new object();

他聲稱原因是靜態對象使執行緒鎖定的速度比非靜態對象慢。這是真的?

編輯:儘管如此,我仍然不確定。這三種方法有什麼區別?

private static readonly object _syncLock = new object();
public static readonly object _syncLock = new object();
private readonly object _syncLock = new object();

鎖定對像是否應該是靜態的取決於您要鎖定的對象。如果要鎖定類的實例,則不能使用靜態鎖定對象。如果要鎖定靜態數據,則不能使用實例鎖定對象。所以似乎沒有任何選擇。

您可以考慮使用靜態或實例鎖定對象來鎖定對實例數據的訪問,但這會導致不同的行為。使用實例鎖定對象,您只鎖定一個實例,而靜態鎖定對象將鎖定所有實例。所以這裡也沒有性能調整的選擇。

引用自:https://stackoverflow.com/questions/779533