3

私はネストされた複数のロックを調査してきましたが、この特定のシナリオがどこで対処されているかはわかりません。

class x
{
Method1()
    {
    Lock (object)
        {
        Method2();
        }
    }


Method2()
    {
    Lock (object)
        {
        //do stuff
        }
    }

}//close class x

ロックオブジェクトを同じにすることはできますか、それとも異なる必要がありますか?

あるアプローチが他のアプローチよりも優れている点はありますか?

4

1 に答える 1

6

lock(モニター)は.NETに再入可能であるため、これらは同じにすることができます。

これは、Monitor.Enterのドキュメントに記載されています。

同じスレッドがブロックせずにEnterを複数回呼び出すことは合法です。ただし、オブジェクトを待機している他のスレッドがブロックを解除する前に、同数のExit呼び出しを呼び出す必要があります。

同じスレッドが同じオブジェクトを複数回使用してロックに入る可能性があるため、上記のコードは同じ同期オブジェクトを共有して正常に機能します。

于 2012-08-23T17:09:23.813 に答える