如何使用锁同步两个函数

时间:2013-05-23 09:02:34

标签: c# .net locking

我有两个功能A和B,我想阻止它们同时运行。我应该使用锁或互斥还是互锁?

这就是我的尝试:

class C
{
    object obj = new Object();

    void A()
    {
        lock(obj)
        {
            // do stuff
        }
    }

    void B()
    {
        lock(obj)
        {
            // do stuff
        }
    }
}

如果我想要A来检查B是否被锁定并返回我将如何处理?

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:3)

您拥有的代码已经阻止两个不同的线程同时调用AB(在C的同一个实例上) - 尽管请注意{{1} }调用A(或B调用B)它会起作用。该呼叫将被阻止,直到它可以获得A

如果您想检查是否可以获得lock而不会阻止 - 您可以通过指定零超时的lock来执行此操作:

TryEnter