複数のロックオブジェクトを待っていない限り、これは問題ありません。あなたはこのような状況がある場合、デッドロックが発生します。
スレッドをA:
lock (lockObject1)
{
// Do some stuff
lock (lockObject2)
{
// Do some stuff
}
}
スレッドB:
lock (lockObject2)
{
// Do some stuff
lock (lockObject1)
{
// Do some stuff
}
}
あなたがスレッドAでlockObject1をロックするために起こる場合は、スレッドBロックlockObject2前スレッドAがそれをロックすると、両方のスレッドは別のスレッドでロックされているオブジェクトを待機し、オブジェクトがロックされている間待機しているのでロックされません。これは単純化された例です。この状況では多くの方法があります。
デッドロックを回避するには、最初のオブジェクトがロックされている間に2番目のオブジェクトを待たないでください。このように一度に1つのオブジェクトをロックすると、デッドロックは発生しません。なぜなら、最終的にロックスレッドは待機中のスレッドに必要なオブジェクトを解放するからです。だから、例えば、上記展開されなければならない:
スレッドA:
lock (lockObject1)
{
// Do some stuff
}
lock (lockObject2)
{
// Do some stuff
}
スレッドB:この場合
lock (lockObject2)
{
// Do some stuff
}
lock (lockObject1)
{
// Do some stuff
}
、各操作が別のリソースを取得しようとせずに完了しますロック、デッドロックが回避されます。
"ローカル"オブジェクトだけがあなたが言うように更新されている場合、なぜあなたは全くロックしていますか?もっと情報が必要だと思う。コードは常に同様に役立ちます。 –
デッドロックを作成したり、コードをスパゲッティにしたりしない限り、もちろんそれを行うことができます。 – Tudor