我遇到的情况是,只有两个储物柜对象空闲时才应执行代码块。
我希望会有类似的东西:
lock(a,b)
{
// this scope is in critical region
}
然而,似乎并没有这样的事情。那么这是否意味着做到这一点的唯一方法是:
lock(a)
{
lock(b)
{
// this scope is in critical region
}
}
这会按预期工作吗?虽然代码可以编译,但我不确定它是否能达到我的预期。
lock(a) lock(b) { // this scope is in critical region }
这可能会阻塞,直到线程可以获得锁a
。然后,获取该锁后,它将阻塞,直到线程可以获取锁b
。所以这按预期工作。
但是,您必须小心不要在其他地方这样做:
lock(b) lock(a) { // this scope is in critical region }
这可能会导致死锁情况,其中线程 1 已获取锁a
并正在等待获取锁b
,并且线程 2 已获取锁b
并正在等待获取锁a
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)