1

マルチスレッド実行コンテキストがあります。1つのリソース(たとえばオブジェクトr)を相互に排他的にしたいと思います。リソース自体をモニターオブジェクトとして使用できますか?

例えば

    lock(r)
    {
        // do something...
    }
4

1 に答える 1

2

全体を通して同じオブジェクトのままである場合r-たとえば、複数のスレッドからアイテムを追加している場合rList

lock (r)
{
    r.Add("Hello world");
}

そうすれば、これは問題ありません。問題は発生しません。具体的に「ロックr」しているので、読むことができます。(使用している他のコードのlock周りにも同様のものを配置するようにしてください。)r

ただし、:r内の別のオブジェクトに切り替えられている場合lock

lock (r)
{
    r = new List<string>();
}

これ良い考えではありませんlock。2つの異なるバージョンに対して2つのスレッドが実行される可能性があるためですr。この場合、object特にロックするために不変のものを作成する必要があります。つまり、「ロック」よりも「コードブロックrをロック」する必要があります。

于 2013-01-23T11:18:21.870 に答える