Dot-Net
執行緒安全對象 - 靜態與否?
我最近在接受采訪,技術人員問我如何使應用程序執行緒安全。
好吧,在
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();
鎖定對像是否應該是靜態的取決於您要鎖定的對象。如果要鎖定類的實例,則不能使用靜態鎖定對象。如果要鎖定靜態數據,則不能使用實例鎖定對象。所以似乎沒有任何選擇。
您可以考慮使用靜態或實例鎖定對象來鎖定對實例數據的訪問,但這會導致不同的行為。使用實例鎖定對象,您只鎖定一個實例,而靜態鎖定對象將鎖定所有實例。所以這裡也沒有性能調整的選擇。