8

假设我有这个代码:

object o1 = new Object();
object o2 = o1;

在 o1 上获得锁与在 o2 上获得锁相同吗?(如果 o1 被锁定,是否会锁定 o2 直到 o1 被释放?)

4

4 回答 4

11

如果它锁定了引​​用本身,那么锁定将毫无用处。问题是,引用本身是按值复制的,因此您总是会锁定一些立即被丢弃的临时副本。

所以这不是它的工作原理。锁定是在引用引用的实例上获得的,而不是引用本身。

于 2013-01-05T16:38:32.133 回答
6

获得锁定o1与获得锁定相同o2吗?

是的。

它与称为同步块的东西一起工作,它是每个对象实例的一部分。但从功能上讲,您可以将其视为将对象用作字典中的键。

锁定引用与锁定 Value type相同,但问题相同。

于 2013-01-05T16:29:45.673 回答
2

是的,因为锁定是在对象上,而不是在对象引用上。o2 = o1复制引用,而不是对象。

于 2013-01-05T16:32:30.840 回答
-1

是的,.NET 锁定引用(锁定值类型会导致错误)

于 2013-01-05T16:32:20.230 回答