锁内c#功能(obj)
对于下面的示例,在执行i++之前是否会释放锁?换句话说,当在锁内调用函数时,锁是否会被释放锁内c#功能(obj),c#,C#,对于下面的示例,在执行i++之前是否会释放锁?换句话说,当在锁内调用函数时,锁是否会被释放 lock (lockerobject /*which is static*/) { call2anotherFunction(); i++; } 不,不会发布的。如果要释放它,请在函数调用后启动锁 call2anotherFunction(); lock (lockerobject which is static) { i++; } 只有退出锁块,锁才会解除lock不知道或不关心您在
lock (lockerobject /*which is static*/)
{
call2anotherFunction();
i++;
}
不,不会发布的。如果要释放它,请在函数调用后启动锁
call2anotherFunction();
lock (lockerobject which is static)
{
i++;
}
只有退出
锁
块,锁才会解除lock
不知道或不关心您在块内执行的代码
事实上,作为一般规则,块内发生的事情不为块外的人所知:
if (condition)
{
// The if doesn't know what happens in here
}
或
但是Dispose只会因为块已退出而被调用,而不仅仅是因为它内部发生了
抛出
。否,只有当代码执行离开锁
块的范围时,锁才会被释放 锁定将一直保持,直到执行点离开右大括号。因此,当i++执行时,锁仍然保持不变
如果cal2anotherfunction抛出异常,i++将永远不会执行,并且当堆栈从创建锁的函数中展开时,锁将被释放(在锁周围有有效的try finally)
using (var reader = XmlReader.Create(url))
{
// using doesn't care what happens in here
throw new Exception("Unless...");
} // Dispose will be called on reader here