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)
{
}
}
}