我有两个功能A和B,我想阻止它们同时运行。我应该使用锁或互斥还是互锁?
这就是我的尝试:
class C
{
object obj = new Object();
void A()
{
lock(obj)
{
// do stuff
}
}
void B()
{
lock(obj)
{
// do stuff
}
}
}
如果我想要A来检查B是否被锁定并返回我将如何处理?
有更好的解决方案吗?
答案 0 :(得分:3)
您拥有的代码已经阻止两个不同的线程同时调用A
和B
(在C
的同一个实例上) - 尽管请注意{{1} }调用A
(或B
调用B
)它会起作用。该呼叫将被阻止,直到它可以获得A
。
如果您想检查是否可以获得lock
而不会阻止 - 您可以通过指定零超时的lock
来执行此操作:
TryEnter