在类中拥有多个锁定对象的最佳实践

Mor*_*ori 4 c# multithreading

在下面的课程中,我要做的方法是做两件完全不同的事情,这些事情与彼此无关.但是我在它们中只使用了一个锁定对象.

我的问题是,这种情况下的最佳做法是什么?每个都有两个单独的锁定对象或共享一个(就像我们在这里做的那样)?

class MyClass
{

private static object _lock = new object();

public void DoSomething()
{
    lock (_lock)
    {

    }
}

public void DoSomethingTotallyDifferent()
{
    lock (_lock)
    {

    }
}
}
Run Code Online (Sandbox Code Playgroud)

Die*_*ken 5

锁定对象应该专用于关键资源,而不是类.

例如,如果您的类ADoSomething方法中使用关键资源,那么应该有一个_lockA对象.如果DoSomethingTotallyDifferent还访问此资源,则它应使用相同的锁对象.如果它访问其他关键资源B,那么它当然应该锁定相应的锁对象_lockB.如果必须使用相同的资源,这些方法只会介入...