C# 一个类中有多个锁对象的最佳实践

C# 一个类中有多个锁对象的最佳实践,c#,multithreading,C#,Multithreading,在下面的课程中,我要学习的方法是做两件完全不同的事情,它们彼此无关。但我在这两个锁中只使用了一个锁对象 我的问题是,在这种情况下,什么是最佳实践?每个锁对象有两个单独的锁对象,还是共享一个锁对象(正如我们在这里所做的) 问题是:DoSomething或DoSomething完全不同的可以互相调用吗?如果是这样,您可以创建死锁。也许现在彼此不打电话,但将来可能会 我的两分钱:安全总比后悔好。使用两个单独的锁变量。锁对象应专用于关键资源,而不是类 例如,如果您的类在DoSomething方法中使用了

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

我的问题是,在这种情况下,什么是最佳实践?每个锁对象有两个单独的锁对象,还是共享一个锁对象(正如我们在这里所做的)


问题是:
DoSomething
DoSomething完全不同的
可以互相调用吗?如果是这样,您可以创建死锁。也许现在彼此不打电话,但将来可能会


我的两分钱:安全总比后悔好。使用两个单独的锁变量。

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


例如,如果您的类在
DoSomething
方法中使用了一个关键资源
a
,那么它应该有一个
\u lockA
对象。如果
DoSomethingTotallyDifferent
也访问此资源,则它应该使用相同的锁对象。如果它访问另一个关键资源
B
,那么它当然应该锁定相应的锁对象
\u lockB
。方法只是相互关联,如果它们必须使用相同的资源…

除此之外,两种方法可能会互相等待,这是绝对不必要的,因为它们在做完全不同的事情。事实上。当并行运行时,这可能也是一个问题@EvkWhy使用两个单独的锁变量更好吗?如果我们有Method1调用Method2,Method2调用Method1(Thread1将由Method1启动,Thread2由Method2启动)。如果它们都有不同的锁对象,它们也会导致死锁。我说得对吗?但对于只有一个lock对象,它们不应该死锁,因为第二个线程必须等待Method1结束后才能执行Method2。(如果它将手作为第二把锁)但是两个锁不是更不安全吗,因为只有这样才有可能出现死锁?我同意这个结论,但我不认为这样更安全。
class MyClass
{

private static object _lock = new object();

public void DoSomething()
{
    lock (_lock)
    {

    }
}

public void DoSomethingTotallyDifferent()
{
    lock (_lock)
    {

    }
}
}