2015-08-09 29 views
0

是否有可能鎖定Equals運算符在類中被覆蓋的基礎?我的意思是,當一個類的不同對象的Equals()返回true時,lock()將它們視爲同一個對象。鎖定考慮Equals()運算

+3

Brr,大量壞主意。鎖關鍵字需要一個特定的對象,而不是一個任意平等的對象。鎖定狀態存儲在對象頭中。幸運的是,你不能欺騙它。所以不行。 –

+0

實際上,我正在尋找一種解決方案,以防止在給定線程中的集合類型參數具有共同元素時併發進入代碼塊。首先想到的是嵌套每個集合元素的鎖定塊。但我不確定它是否可以在沒有性能問題的情況下運行。所以,我正在創建一個包含集合的新類,並以一種當集合具有公共對象時返回true的方式實現Equals方法。我知道這可能是一個壞主意。但這是我找到的唯一想法。 –

回答

0

不,這是不可能的。

lock語句在每個分配的引用類型內部的一個位上中繼,該引用類型是對象頭中該對象的「同步塊」。一旦對該對象執行了鎖定,該位標誌將被設置爲1.這就是運行時知道該對象當前用作鎖的方式。當採取lock時,不會檢查對象是否相等。