我想知道这种构造是否会导致错误:
lock(sync)
{
// something
lock(sync)
{
//something
lock(sync)
{
//something
}
}
}
我已经运行了这段代码,看起来不错,但也许在某些情况下可能会引发错误?
lock是一个包装器Monitor.Enter and Monitor.Exit http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx:
The lock
关键字调用Enter
在块的开头和Exit
在块的末尾。来自前者的文档:
从文档中Monitor.Enter http://msdn.microsoft.com/en-us/library/de0542zz.aspx:
同一个线程调用是合法的Enter
不止一次而不会阻塞;然而,同等数量的Exit
必须在等待该对象的其他线程解除阻塞之前调用调用。
因为调用Enter
and Exit
配对后,您的代码模式具有明确定义的行为。
但请注意,lock
不保证是无异常的构造:
A ThreadInterruptedException
被抛出如果Interrupt
中断正在等待进入的线程lock
陈述。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)