假设我有一个对象数组:
MyObject[] objects = new MyObject[10];然后循环遍历数组,并锁定每个对象,以便按数组索引进行处理:
for (int i=0; i<10; i++)
{
lock (objects[i])
{
// process objects[i]
}
}这是否意味着对象本身被锁定了?还是引用对象被锁定了?是否会阻止来自其他地方(而不是通过此数组)对同一对象的另一个调用?
发布于 2016-04-22 13:01:16
锁定机制与对象关联,与引用无关,与变量无关。
因此,是的,锁定在其他地方和另一个线程上的同一个对象实例会阻止它,直到退出示例代码中的锁为止。
请注意,不使用lock或Monitor.Enter的其他线程上的代码不会被阻塞。
另外,请注意,锁的语句块中的异常将退出该块并释放锁,可能会留下任何锁处于损坏状态。
https://stackoverflow.com/questions/36794495
复制相似问题