锁定对象引用是否锁定对象或引用?

时间:2016-04-22 12:57:00

标签: c# object locking

假设我有一个对象数组:

MyObject[] objects = new MyObject[10];

然后我循环遍历数组,并锁定每个对象以便按数组索引进行处理:

for (int i=0; i<10; i++)
{
    lock (objects[i])
    {
        // process objects[i]
    }
}

这是否意味着对象本身已被锁定?或者参考对象[i]被锁定了?是否会阻止从通过此数组以外的其他地方调用同一对象?

1 个答案:

答案 0 :(得分:1)

锁机制与对象相关联,而不是与引用相关联,而不与变量相关联。

所以是的,在其他地方锁定同一个对象实例,在另一个线程上将阻塞其他地方,直到你在示例代码中退出锁。

请注意,不使用lockMonitor.Enter的其他线程上的代码将被阻止。

另外,请注意锁定语句块内的异常将退出该块并释放锁定,可能会将您锁定的任何内容保留在损坏的状态。