假设我有这个代码:
object o1 = new Object();
object o2 = o1;
在 o1 上获得锁与在 o2 上获得锁相同吗?(如果 o1 被锁定,是否会锁定 o2 直到 o1 被释放?)
假设我有这个代码:
object o1 = new Object();
object o2 = o1;
在 o1 上获得锁与在 o2 上获得锁相同吗?(如果 o1 被锁定,是否会锁定 o2 直到 o1 被释放?)
如果它锁定了引用本身,那么锁定将毫无用处。问题是,引用本身是按值复制的,因此您总是会锁定一些立即被丢弃的临时副本。
所以这不是它的工作原理。锁定是在引用引用的实例上获得的,而不是引用本身。
获得锁定
o1
与获得锁定相同o2
吗?
是的。
它与称为同步块的东西一起工作,它是每个对象实例的一部分。但从功能上讲,您可以将其视为将对象用作字典中的键。
锁定引用与锁定 Value type相同,但问题相同。
是的,因为锁定是在对象上,而不是在对象引用上。o2 = o1
复制引用,而不是对象。
是的,.NET 锁定引用(锁定值类型会导致错误)