以下のクラスでは、互いに全く関係のない2つの全く異なる方法を実行しています。しかし、私は両方のロックオブジェクトを1つだけ使用しています。クラス内に複数のロックオブジェクトを持つためのベストプラクティス
私の質問は、このようなシナリオではどのようなベストプラクティスですか?それぞれに2つの独立したロックオブジェクトを持っているか(ここでやっているように)?
class MyClass
{
private static object _lock = new object();
public void DoSomething()
{
lock (_lock)
{
}
}
public void DoSomethingTotallyDifferent()
{
lock (_lock)
{
}
}
}
これに加えて、両方のメソッドが完全に別のものを実行しているので、絶対に必要ではない、 – Evk
確かに。並行して走っている時にはそれも問題かもしれません。 @Evk –
なぜ2つの別々のロック変数を使用する方が良いですか? Method1を呼び出すMethod1とMethod1を呼び出すMethod2がある場合(Thread1はMethod1で開始し、Thread2はMethod2で開始します)両方が異なるロックオブジェクトを持つ場合、デッドロックも発生します。私は正しい?しかし、ロックオブジェクトが1つしかない場合、メソッド2を実行する前に2番目のスレッドがMethod1の終了を待たなければならないため、デッドロックしないでください。 (2番目の手をとっている場合) –