2015-08-09 62 views
0

是否有可能锁定Equals运算符在类中被覆盖的基础?我的意思是,当一个类的不同对象的Equals()返回true时,lock()将它们视为同一个对象。锁定考虑Equals()运算

+3

Brr,大量坏主意。锁关键字需要一个特定的对象,而不是一个任意平等的对象。锁定状态存储在对象头中。幸运的是,你不能欺骗它。所以不行。 –

+0

实际上,我正在寻找一种解决方案,以防止在给定线程中的集合类型参数具有共同元素时并发进入代码块。首先想到的是嵌套每个集合元素的锁定块。但我不确定它是否可以在没有性能问题的情况下运行。所以,我正在创建一个包含集合的新类,并以一种当集合具有公共对象时返回true的方式实现Equals方法。我知道这可能是一个坏主意。但这是我找到的唯一想法。 –

回答

0

不,这是不可能的。

lock语句在每个分配的引用类型内部的一个位上中继,该引用类型是对象头中该对象的“同步块”。一旦对该对象执行了锁定,该位标志将被设置为1.这就是运行时知道该对象当前用作锁的方式。当采取lock时,不会检查对象是否相等。